diff --git a/CMake/cmake_config_files/PHOENIX.config.cmake b/CMake/cmake_config_files/PHOENIX.config.cmake
index 14fe65bc950f29347c30f413b46ad599f91ebcdb..2f576538c106a6a4d83509a49a1408a8d63efbdb 100644
--- a/CMake/cmake_config_files/PHOENIX.config.cmake
+++ b/CMake/cmake_config_files/PHOENIX.config.cmake
@@ -44,5 +44,4 @@ SET(BOOST_LIBRARYDIR  "/cluster/lib/boost/1.63.0/gcc/lib"  CACHE PATH "BOOST_LIB
 #SET(VTK_DIR "/home/stelenz/software/vtk/VTK-8.1.0/build" CACHE PATH "VTK directory override" FORCE)
 
 ## nvidia
-set(NVCUDASAMPLES_ROOT "/cluster/cuda/11.0/samples")
 set(CMAKE_CUDA_ARCHITECTURES 60) # NVIDIA Tesla P100
\ No newline at end of file
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCAlgorithm.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/BCAlgorithm.cpp
index 8737b8c04d9c2546c30cc6657e6f17d295bd542f..61b427e323dce214240f439eb0ff45c62029e05f 100644
--- a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCAlgorithm.cpp
+++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/BCAlgorithm.cpp
@@ -36,12 +36,7 @@
 #include "BCArray3D.h"
 #include "BoundaryConditions.h"
 #include "EsoTwist3D.h"
-#include "BCArray3D.h"
-
 
-BCAlgorithm::BCAlgorithm() : compressible(false), thixotropy(false)
-{
-}
 //////////////////////////////////////////////////////////////////////////
 void BCAlgorithm::setNodeIndex(int x1, int x2, int x3)
 {
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCAlgorithm.h b/src/cpu/VirtualFluidsCore/BoundaryConditions/BCAlgorithm.h
index 3adbed44871d82ef896fabd7834b6fb16e35b285..734aa9342df011846ce345ba7c37a181383e8828 100644
--- a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCAlgorithm.h
+++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/BCAlgorithm.h
@@ -47,50 +47,50 @@ class BoundaryConditions;
 class BCAlgorithm
 {
 public:
-   static const char VelocityBCAlgorithm = 0;
-   static const char EqDensityBCAlgorithm = 1;
-   static const char NonEqDensityBCAlgorithm = 2;
-   static const char NoSlipBCAlgorithm = 3;
-   static const char SlipBCAlgorithm = 4;
-   static const char HighViscosityNoSlipBCAlgorithm = 5;
-   static const char ThinWallNoSlipBCAlgorithm = 6;
-   static const char VelocityWithDensityBCAlgorithm = 7;
-   static const char NonReflectingOutflowBCAlgorithm = 8;
-   static const char VelocityAndThixotropyBCAlgorithm = 9;
-   static const char DensityAndThixotropyBCAlgorithm = 10;
-   static const char NoSlipAndThixotropyBCAlgorithm = 11;
-   static const char NonReflectingOutflowAndThixotropyBCAlgorithm = 12;
-   static const char VelocityWithDensityAndThixotropyBCAlgorithm = 13;
-   static const char BinghamModelNoSlipBCAlgorithm = 14;
-   static const char HerschelBulkleyModelNoSlipBCAlgorithm = 15;
-   static const char SimpleVelocityBCAlgorithm = 16;
-   static const char SimpleSlipBCAlgorithm = 17;
-   static const char PowellEyringModelNoSlipBCAlgorithm = 18;
-   static const char BinghamModelVelocityBCAlgorithm = 19;
+    static const char VelocityBCAlgorithm = 0;
+    static const char EqDensityBCAlgorithm = 1;
+    static const char NonEqDensityBCAlgorithm = 2;
+    static const char NoSlipBCAlgorithm = 3;
+    static const char SlipBCAlgorithm = 4;
+    static const char HighViscosityNoSlipBCAlgorithm = 5;
+    static const char ThinWallNoSlipBCAlgorithm = 6;
+    static const char VelocityWithDensityBCAlgorithm = 7;
+    static const char NonReflectingOutflowBCAlgorithm = 8;
+    static const char VelocityAndThixotropyBCAlgorithm = 9;
+    static const char DensityAndThixotropyBCAlgorithm = 10;
+    static const char NoSlipAndThixotropyBCAlgorithm = 11;
+    static const char NonReflectingOutflowAndThixotropyBCAlgorithm = 12;
+    static const char VelocityWithDensityAndThixotropyBCAlgorithm = 13;
+    static const char BinghamModelNoSlipBCAlgorithm = 14;
+    static const char HerschelBulkleyModelNoSlipBCAlgorithm = 15;
+    static const char SimpleVelocityBCAlgorithm = 16;
+    static const char SimpleSlipBCAlgorithm = 17;
+    static const char PowellEyringModelNoSlipBCAlgorithm = 18;
+    static const char BinghamModelVelocityBCAlgorithm = 19;
 
 
 public:
-   BCAlgorithm();
-   virtual ~BCAlgorithm() {}
-   
-   virtual void addDistributions(SPtr<DistributionArray3D> distributions) = 0;
-   void setNodeIndex(int x1, int x2, int x3);
-   void setBcPointer(SPtr<BoundaryConditions> bcPtr);
-   void setCompressible(bool c);
-   void setCollFactor(LBMReal cf);
-   char getType();
-   bool isPreCollision();
-   virtual SPtr<BCAlgorithm> clone() = 0;
-   SPtr<BCArray3D> getBcArray();
-   void setBcArray(SPtr<BCArray3D> bcarray);
-   virtual void applyBC() = 0;
-   bool getThixotropy(){ return thixotropy;};
+    BCAlgorithm() = default;
+    virtual ~BCAlgorithm() = default;
+
+    virtual void addDistributions(SPtr<DistributionArray3D> distributions) = 0;
+    void setNodeIndex(int x1, int x2, int x3);
+    void setBcPointer(SPtr<BoundaryConditions> bcPtr);
+    void setCompressible(bool c);
+    void setCollFactor(LBMReal cf);
+    char getType();
+    bool isPreCollision();
+    virtual SPtr<BCAlgorithm> clone() = 0;
+    SPtr<BCArray3D> getBcArray();
+    void setBcArray(SPtr<BCArray3D> bcarray);
+    virtual void applyBC() = 0;
+    bool getThixotropy(){ return thixotropy; };
 
 protected:
-   bool compressible;
-   char type;
-   bool preCollision;
-   bool thixotropy;
+    bool compressible { false };
+    char type;
+    bool preCollision;
+    bool thixotropy { false };
 
     SPtr<BoundaryConditions> bcPtr;
     SPtr<DistributionArray3D> distributions;
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BoundaryConditions.h b/src/cpu/VirtualFluidsCore/BoundaryConditions/BoundaryConditions.h
index 9539139ed77841218695f0ae687e3a13ec7758f9..84ba7a6041d38546da03323f35a23f7084df9809 100644
--- a/src/cpu/VirtualFluidsCore/BoundaryConditions/BoundaryConditions.h
+++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/BoundaryConditions.h
@@ -46,28 +46,16 @@
 //! Difenition of baundary conditions in grid generation
 class BoundaryConditions
 {
-    // public:
-    //   enum BcAlgorithm{VelocityBC, SlipBC, NoSlipBC, ThinWallNoSlipBC, HighViscosityNoSlipBC, EqDensityBC,
-    //   NonEqDensityBC, NonReflectingVelocityBC, NonReflectingDensityBC};
 public:
     BoundaryConditions()
-        : noslipBoundaryFlags(0), slipBoundaryFlags(0), velocityBoundaryFlags(0), densityBoundaryFlags(0),
-          wallModelBoundaryFlags(0), bcVelocityX1(0.0f), bcVelocityX2(0.0f), bcVelocityX3(0.0f), bcDensity(0.0f)
-          //, bcThixotropy(0.0f)
-          ,
-          bcLodiDensity(0.0f), bcLodiVelocityX1(0.0f), bcLodiVelocityX2(0.0f), bcLodiVelocityX3(0.0f),
-          bcLodiLentgh(0.0f), nx1(0.0f), nx2(0.0f), nx3(0.0f), algorithmType(-1)
     {
-        // wenn folgendes nicht geht, dann hat man weiter unten bei der bit-geschichte ein ernstes problem!!!
         UB_STATIC_ASSERT(sizeof(long long) >= 8);
-        // UB_STATIC_ASSERT( sizeof(double) >= 16);
-        // UB_STATIC_ASSERT( sizeof(long long) == 32);
         UB_STATIC_ASSERT((sizeof(long long) * 8) >= (D3Q27System::FENDDIR + 1) * BoundaryConditions::optionDigits);
 
         for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++)
             q[fdir] = -999.;
     }
-    virtual ~BoundaryConditions() {}
+    virtual ~BoundaryConditions() = default;
 
     virtual bool isEmpty()
     {
@@ -94,9 +82,9 @@ protected:
         if ((secOpt + 1) > maxOptionVal)
             throw UbException(UB_EXARGS, "error: option > " + UbSystem::toString(maxOptionVal - 1));
 
-        // alle digits an den betreffenden postionen auf "0"
+        // all digits at the respective positions to "0"
         flag &= ~(maxOptionVal << (direction * optionDigits));
-        // alle digitsan den betreffenden postionen entsprechend der marke setzen
+        // set all digits according to the flag at the respective positions
         flag |= ((long long)(secOpt + 1) << (direction * optionDigits));
     }
 
@@ -344,35 +332,33 @@ public:
     char getBcAlgorithmType() { return algorithmType; }
 
 public:
-    static const int optionDigits =
-        2; //--> 3 bits fr secondary Option --> maxOptionVal = 7, da man mit drei Digits max die 7 darstellen kann
+    static const int optionDigits = 2;   //--> 2 bits for secondary Option --> maxOptionVal = 7
     static const long long maxOptionVal; // = ( 1<<optionDigits ) - 1; //2^3-1 -> 7
 
 protected:
     float q[D3Q27System::FENDDIR + 1];
-    // float q[D3Q27System::STARTF+1];
 
-    long long noslipBoundaryFlags;
-    long long slipBoundaryFlags;
-    long long velocityBoundaryFlags;
-    long long densityBoundaryFlags;
-    long long wallModelBoundaryFlags;
+    long long noslipBoundaryFlags{ 0 };
+    long long slipBoundaryFlags{ 0 };
+    long long velocityBoundaryFlags{ 0 };
+    long long densityBoundaryFlags{ 0 };
+    long long wallModelBoundaryFlags{ 0 };
 
-    float bcVelocityX1;
-    float bcVelocityX2;
-    float bcVelocityX3;
-    float bcDensity;
-    // float  bcThixotropy;
+    float bcVelocityX1{ 0.0f };
+    float bcVelocityX2{ 0.0f };
+    float bcVelocityX3{ 0.0f };
+    float bcDensity{ 0.0f };
+    // float  bcThixotropy{ 0.0f };
 
-    float bcLodiDensity;
-    float bcLodiVelocityX1;
-    float bcLodiVelocityX2;
-    float bcLodiVelocityX3;
-    float bcLodiLentgh;
+    float bcLodiDensity{ 0.0f };
+    float bcLodiVelocityX1{ 0.0f };
+    float bcLodiVelocityX2{ 0.0f };
+    float bcLodiVelocityX3{ 0.0f };
+    float bcLodiLentgh{ 0.0f };
 
-    float nx1, nx2, nx3;
+    float nx1{ 0.0f }, nx2{ 0.0f }, nx3{ 0.0f };
 
-    char algorithmType;
+    char algorithmType { -1 };
 
 private:
     friend class MPIIORestartCoProcessor;
@@ -380,5 +366,4 @@ private:
     friend class MPIIOMigrationBECoProcessor;
 };
 
-
 #endif
diff --git a/src/cpu/VirtualFluidsCore/CMakeLists.txt b/src/cpu/VirtualFluidsCore/CMakeLists.txt
index 3506f0b76399043cbe546ea44ef4b57bd2d794c3..09766e266935ed1c7d89223c0713363f4df5edcf 100644
--- a/src/cpu/VirtualFluidsCore/CMakeLists.txt
+++ b/src/cpu/VirtualFluidsCore/CMakeLists.txt
@@ -1,21 +1,19 @@
 
+set(VF_LIBRARIES)
+
 IF(${USE_METIS} AND METIS_RELEASE_LIBRARY AND METIS_DEBUG_LIBRARY)
-   SET(LINK_LIBRARY optimized ${METIS_RELEASE_LIBRARY} debug ${METIS_DEBUG_LIBRARY})
-   SET(CAB_ADDITIONAL_LINK_LIBRARIES ${CAB_ADDITIONAL_LINK_LIBRARIES} ${LINK_LIBRARY})
+   list(APPEND VF_LIBRARIES optimized ${METIS_RELEASE_LIBRARY} debug ${METIS_DEBUG_LIBRARY})
 ELSE()
-   SET(CAB_ADDITIONAL_LINK_LIBRARIES ${CAB_ADDITIONAL_LINK_LIBRARIES} metis)
+   list(APPEND VF_LIBRARIES metis)
 ENDIF()
 
 IF(${USE_VTK})
-   SET(LINK_LIBRARY optimized ${VTK_LIBRARIES} debug ${VTK_LIBRARIES})
-   SET(CAB_ADDITIONAL_LINK_LIBRARIES ${CAB_ADDITIONAL_LINK_LIBRARIES} ${LINK_LIBRARY})
+   list(APPEND VF_LIBRARIES optimized ${VTK_LIBRARIES} debug ${VTK_LIBRARIES})
 ENDIF()
 
 IF(${USE_CATALYST})
-   SET(LINK_LIBRARY optimized vtkPVPythonCatalyst debug vtkPVPythonCatalyst )
-   SET(CAB_ADDITIONAL_LINK_LIBRARIES ${CAB_ADDITIONAL_LINK_LIBRARIES} ${LINK_LIBRARY})
-   SET(LINK_LIBRARY optimized vtkParallelMPI debug vtkParallelMPI )
-   SET(CAB_ADDITIONAL_LINK_LIBRARIES ${CAB_ADDITIONAL_LINK_LIBRARIES} ${LINK_LIBRARY})
+   list(APPEND VF_LIBRARIES optimized vtkPVPythonCatalyst debug vtkPVPythonCatalyst)
+   list(APPEND VF_LIBRARIES optimized vtkParallelMPI debug vtkParallelMPI )
 ENDIF()
 
 
@@ -24,10 +22,10 @@ IF(${USE_DEM_COUPLING})
 ENDIF()
 
 if(BUILD_USE_OPENMP)
-   list(APPEND CAB_ADDITIONAL_LINK_LIBRARIES OpenMP::OpenMP_CXX)
+   list(APPEND VF_LIBRARIES OpenMP::OpenMP_CXX)
 endif()
 
-vf_add_library(BUILDTYPE static PUBLIC_LINK basics muparser MPI::MPI_CXX ${CAB_ADDITIONAL_LINK_LIBRARIES})
+vf_add_library(BUILDTYPE static PUBLIC_LINK basics muparser MPI::MPI_CXX ${VF_LIBRARIES})
 
 
 vf_get_library_name(library_name)
diff --git a/src/cpu/VirtualFluidsCore/CoProcessors/WriteBoundaryConditionsCoProcessor.cpp b/src/cpu/VirtualFluidsCore/CoProcessors/WriteBoundaryConditionsCoProcessor.cpp
index e1f45387908b33e0cf9a8dd887f3382304e6c1b4..117088f67aa0e832608d96480e15bde2fb5dec3b 100644
--- a/src/cpu/VirtualFluidsCore/CoProcessors/WriteBoundaryConditionsCoProcessor.cpp
+++ b/src/cpu/VirtualFluidsCore/CoProcessors/WriteBoundaryConditionsCoProcessor.cpp
@@ -147,8 +147,6 @@ void WriteBoundaryConditionsCoProcessor::addDataGeo(SPtr<Block3D> block)
     SPtr<ILBMKernel> kernel = block->getKernel();
     SPtr<BCArray3D> bcArray = kernel->getBCProcessor()->getBCArray();
 
-    // knotennummerierung faengt immer bei 0 an!
-    int SWB = 0, SEB = 0, NEB = 0, NWB = 0, SWT = 0, SET = 0, NET = 0, NWT = 0;
 
     int minX1 = 0;
     int minX2 = 0;
@@ -206,6 +204,9 @@ void WriteBoundaryConditionsCoProcessor::addDataGeo(SPtr<Block3D> block)
     maxX2 -= 1;
     maxX3 -= 1;
 
+    // knotennummerierung faengt immer bei 0 an!
+    int SWB = 0, SEB = 0, NEB = 0, NWB = 0, SWT = 0, SET = 0, NET = 0, NWT = 0;
+
     // cell vector erstellen
     for (int ix3 = minX3; ix3 <= maxX3; ix3++) {
         for (int ix2 = minX2; ix2 <= maxX2; ix2++) {
diff --git a/src/cpu/VirtualFluidsCore/CoProcessors/WriteMacroscopicQuantitiesCoProcessor.cpp b/src/cpu/VirtualFluidsCore/CoProcessors/WriteMacroscopicQuantitiesCoProcessor.cpp
index 04191a9927f34d8616ae5bcb1d9670432e5ddb0e..f12023be05f6fdabf694f7508e0c46aca96d8e15 100644
--- a/src/cpu/VirtualFluidsCore/CoProcessors/WriteMacroscopicQuantitiesCoProcessor.cpp
+++ b/src/cpu/VirtualFluidsCore/CoProcessors/WriteMacroscopicQuantitiesCoProcessor.cpp
@@ -47,7 +47,6 @@
 #include "basics/writer/WbWriterVtkXmlASCII.h"
 
 WriteMacroscopicQuantitiesCoProcessor::WriteMacroscopicQuantitiesCoProcessor() = default;
-
 //////////////////////////////////////////////////////////////////////////
 WriteMacroscopicQuantitiesCoProcessor::WriteMacroscopicQuantitiesCoProcessor(SPtr<Grid3D> grid, SPtr<UbScheduler> s,
                                                                              const std::string &path,
@@ -111,8 +110,7 @@ void WriteMacroscopicQuantitiesCoProcessor::collectData(double step)
 
     std::vector<std::string> cellDataNames;
     std::vector<std::string> pieces = comm->gather(piece);
-    if (comm->getProcessID() == comm->getRoot())
-    {
+    if (comm->getProcessID() == comm->getRoot()) {
         std::string pname =
                 WbWriterVtkXmlASCII::getInstance()->writeParallelFile(pfilePath, pieces, datanames, cellDataNames);
         found = pname.find_last_of("/");
diff --git a/src/cpu/VirtualFluidsCore/Data/DataSet3D.h b/src/cpu/VirtualFluidsCore/Data/DataSet3D.h
index e869c39cdf1f305c5adaee1d1c803c9902c301ee..4930beeab491caf541c436a2e60b326b7cd54c64 100644
--- a/src/cpu/VirtualFluidsCore/Data/DataSet3D.h
+++ b/src/cpu/VirtualFluidsCore/Data/DataSet3D.h
@@ -36,149 +36,150 @@
 
 #include <PointerDefinitions.h>
 
-#include "basics/container/CbArray4D.h"
-#include "basics/container/CbArray3D.h"
 #include "DistributionArray3D.h"
+#include "basics/container/CbArray3D.h"
+#include "basics/container/CbArray4D.h"
 
-typedef CbArray4D<LBMReal,IndexerX4X3X2X1> AverageValuesArray3D;
-typedef CbArray4D<LBMReal,IndexerX4X3X2X1> ShearStressValuesArray3D;
-typedef CbArray3D<LBMReal, IndexerX3X2X1> RelaxationFactorArray3D;
+using AverageValuesArray3D     = CbArray4D<LBMReal, IndexerX4X3X2X1>;
+using ShearStressValuesArray3D = CbArray4D<LBMReal, IndexerX4X3X2X1>;
+using RelaxationFactorArray3D  = CbArray3D<LBMReal, IndexerX3X2X1>;
 
+//! A class provides an interface for data structures in the kernel.
 class DataSet3D
 {
 public:
-   SPtr<DistributionArray3D> getFdistributions() const;
-   void setFdistributions(SPtr<DistributionArray3D> distributions);
+    SPtr<DistributionArray3D> getFdistributions() const;
+    void setFdistributions(SPtr<DistributionArray3D> distributions);
+
+    SPtr<DistributionArray3D> getHdistributions() const;
+    void setHdistributions(SPtr<DistributionArray3D> distributions);
+
+    SPtr<AverageValuesArray3D> getAverageDensity() const;
+    void setAverageDensity(SPtr<AverageValuesArray3D> values);
 
-   SPtr<DistributionArray3D> getHdistributions() const;
-   void setHdistributions(SPtr<DistributionArray3D> distributions);
+    SPtr<AverageValuesArray3D> getAverageVelocity() const;
+    void setAverageVelocity(SPtr<AverageValuesArray3D> values);
 
-   SPtr<AverageValuesArray3D> getAverageDensity() const;
-   void setAverageDensity(SPtr<AverageValuesArray3D> values);
+    SPtr<AverageValuesArray3D> getAverageFluctuations() const;
+    void setAverageFluctuations(SPtr<AverageValuesArray3D> values);
 
-   SPtr<AverageValuesArray3D> getAverageVelocity() const;
-   void setAverageVelocity(SPtr<AverageValuesArray3D> values);
+    SPtr<AverageValuesArray3D> getAverageTriplecorrelations() const;
+    void setAverageTriplecorrelations(SPtr<AverageValuesArray3D> values);
 
-   SPtr<AverageValuesArray3D> getAverageFluctuations() const;
-   void setAverageFluctuations(SPtr<AverageValuesArray3D> values);
+    SPtr<AverageValuesArray3D> getAverageValues() const;
+    void setAverageValues(SPtr<AverageValuesArray3D> values);
 
-   SPtr<AverageValuesArray3D> getAverageTriplecorrelations() const;
-   void setAverageTriplecorrelations(SPtr<AverageValuesArray3D> values);
-   
-   SPtr<AverageValuesArray3D> getAverageValues() const;
-   void setAverageValues(SPtr<AverageValuesArray3D> values);
-   
-   SPtr<ShearStressValuesArray3D> getShearStressValues() const;
-   void setShearStressValues(SPtr<ShearStressValuesArray3D> values);
+    SPtr<ShearStressValuesArray3D> getShearStressValues() const;
+    void setShearStressValues(SPtr<ShearStressValuesArray3D> values);
 
-   SPtr<RelaxationFactorArray3D> getRelaxationFactor() const;
-   void setRelaxationFactor(SPtr<RelaxationFactorArray3D> values);
+    SPtr<RelaxationFactorArray3D> getRelaxationFactor() const;
+    void setRelaxationFactor(SPtr<RelaxationFactorArray3D> values);
 protected:
 private:
-   SPtr<DistributionArray3D> fdistributions;
+    SPtr<DistributionArray3D> fdistributions;
 
-   SPtr<DistributionArray3D> hdistributions;
+    SPtr<DistributionArray3D> hdistributions;
 
-   SPtr<AverageValuesArray3D> averageValues;
+    SPtr<AverageValuesArray3D> averageValues;
 
-   SPtr<AverageValuesArray3D> averageDensity;
-   SPtr<AverageValuesArray3D> averageVelocity;
-   SPtr<AverageValuesArray3D> averageFluktuations;
-   SPtr<AverageValuesArray3D> averageTriplecorrelations;
+    SPtr<AverageValuesArray3D> averageDensity;
+    SPtr<AverageValuesArray3D> averageVelocity;
+    SPtr<AverageValuesArray3D> averageFluktuations;
+    SPtr<AverageValuesArray3D> averageTriplecorrelations;
 
-   SPtr<ShearStressValuesArray3D> shearStressValues;
+    SPtr<ShearStressValuesArray3D> shearStressValues;
 
-   SPtr<RelaxationFactorArray3D> relaxationFactor;
+    SPtr<RelaxationFactorArray3D> relaxationFactor;
 
 };
 
 inline SPtr<DistributionArray3D> DataSet3D::getFdistributions() const
-{ 
-   return fdistributions; 
+{
+    return fdistributions;
 }
 
 inline void DataSet3D::setFdistributions(SPtr<DistributionArray3D> distributions)
-{ 
-   fdistributions = distributions; 
+{
+    fdistributions = distributions;
 }
 
 inline SPtr<DistributionArray3D> DataSet3D::getHdistributions() const
 {
-	return hdistributions;
+    return hdistributions;
 }
 
 inline void DataSet3D::setHdistributions(SPtr<DistributionArray3D> distributions)
 {
-	hdistributions = distributions;
+    hdistributions = distributions;
 }
 
 inline SPtr<AverageValuesArray3D> DataSet3D::getAverageValues() const
-{ 
-   return averageValues; 
+{
+    return averageValues;
 }
 
 inline void DataSet3D::setAverageValues(SPtr<AverageValuesArray3D> values)
-{ 
-   averageValues = values; 
+{
+    averageValues = values;
 }
 
 inline SPtr<AverageValuesArray3D> DataSet3D::getAverageDensity() const
 {
-   return averageDensity;
+    return averageDensity;
 }
 
 inline void DataSet3D::setAverageDensity(SPtr<AverageValuesArray3D> values)
 {
-   averageDensity = values;
+    averageDensity = values;
 }
 
 inline SPtr<AverageValuesArray3D> DataSet3D::getAverageVelocity() const
 {
-   return averageVelocity;
+    return averageVelocity;
 }
 
 inline void DataSet3D::setAverageVelocity(SPtr<AverageValuesArray3D> values)
 {
-   averageVelocity = values;
+    averageVelocity = values;
 }
 
 inline SPtr<AverageValuesArray3D> DataSet3D::getAverageFluctuations() const
 {
-   return averageFluktuations;
+    return averageFluktuations;
 }
 
 inline void DataSet3D::setAverageFluctuations(SPtr<AverageValuesArray3D> values)
 {
-   averageFluktuations = values;
+    averageFluktuations = values;
 }
 
 inline SPtr<AverageValuesArray3D> DataSet3D::getAverageTriplecorrelations() const
 {
-   return averageTriplecorrelations;
+    return averageTriplecorrelations;
 }
 
 inline void DataSet3D::setAverageTriplecorrelations(SPtr<AverageValuesArray3D> values)
 {
-   averageTriplecorrelations = values;
+    averageTriplecorrelations = values;
 }
 
 inline SPtr<ShearStressValuesArray3D> DataSet3D::getShearStressValues() const
-{ 
-   return shearStressValues; 
+{
+    return shearStressValues;
 }
 
 inline void DataSet3D::setShearStressValues(SPtr<ShearStressValuesArray3D> values)
-{ 
-   shearStressValues = values; 
+{
+    shearStressValues = values;
 }
 
 inline SPtr<RelaxationFactorArray3D> DataSet3D::getRelaxationFactor() const
 {
-   return relaxationFactor;
+    return relaxationFactor;
 }
 
 inline void DataSet3D::setRelaxationFactor(SPtr<RelaxationFactorArray3D> values)
 {
-   relaxationFactor = values;
+    relaxationFactor = values;
 }
 #endif
diff --git a/src/cpu/VirtualFluidsCore/Data/DistributionArray3D.h b/src/cpu/VirtualFluidsCore/Data/DistributionArray3D.h
index fc1c67ad129d6cd7e7f5f9c9cd50ec4c76bfe714..8fe4dccea1b53da0513a093e8a741cd0071caf48 100644
--- a/src/cpu/VirtualFluidsCore/Data/DistributionArray3D.h
+++ b/src/cpu/VirtualFluidsCore/Data/DistributionArray3D.h
@@ -1,8 +1,42 @@
+//=======================================================================================
+// ____          ____    __    ______     __________   __      __       __        __
+// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
+//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
+//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
+//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
+//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
+//      \    \  |    |   ________________________________________________________________
+//       \    \ |    |  |  ______________________________________________________________|
+//        \    \|    |  |  |         __          __     __     __     ______      _______
+//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
+//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
+//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
+//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
+//
+//  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 DistributionArray3D.h
+//! \ingroup Data
+//! \author Konstantin Kutscher
+//=======================================================================================
+
 #ifndef DistributionArray3D_H
 #define DistributionArray3D_H
 
 #include <LBMSystem.h>
 
+//! \brief Abstract class of data structure for LBM
 class DistributionArray3D
 {
 public:
@@ -10,14 +44,41 @@ public:
 
     virtual ~DistributionArray3D() = default;
 
-
-    virtual size_t getNX1() const                                                                       = 0;
-    virtual size_t getNX2() const                                                                       = 0;
-    virtual size_t getNX3() const                                                                       = 0;
-    virtual void getDistribution(LBMReal *const f, size_t x1, size_t x2, size_t x3)                     = 0;
-    virtual void setDistribution(const LBMReal *const f, size_t x1, size_t x2, size_t x3)               = 0;
-    virtual void getDistributionInv(LBMReal *const f, size_t x1, size_t x2, size_t x3)                  = 0;
-    virtual void setDistributionInv(const LBMReal *const f, size_t x1, size_t x2, size_t x3)            = 0;
+    //! get number of nodes for x1 direction
+    virtual size_t getNX1() const = 0;
+    //! get number of nodes for x2 direction
+    virtual size_t getNX2() const = 0;
+    //! get number of nodes for x3 direction
+    virtual size_t getNX3() const = 0;
+    //! get distribution
+    //! \param f distribution
+    //! \param x1 coordinate x1
+    //! \param x2 coordinate x2
+    //! \param x3 coordinate x3
+    virtual void getDistribution(LBMReal *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 LBMReal *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(LBMReal *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 LBMReal *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 LBMReal *const f, size_t x1, size_t x2, size_t x3,
                                              unsigned long int direction)                               = 0;
     virtual void setDistributionForDirection(LBMReal f, size_t x1, size_t x2, size_t x3, int direction) = 0;
diff --git a/src/cpu/VirtualFluidsCore/Grid/BasicCalculator.cpp b/src/cpu/VirtualFluidsCore/Grid/BasicCalculator.cpp
index d55a59b58b026ec46b7cdc3e48aa796ec24d181a..d2a7baee86607f7c99a30cf59910fa831ae4a7a9 100644
--- a/src/cpu/VirtualFluidsCore/Grid/BasicCalculator.cpp
+++ b/src/cpu/VirtualFluidsCore/Grid/BasicCalculator.cpp
@@ -33,12 +33,12 @@
 
 #include "BasicCalculator.h"
 
-#include "Block3D.h"
 #include "BCProcessor.h"
-#include "LBMKernel.h"
+#include "Block3D.h"
 #include "Block3DConnector.h"
-#include "UbScheduler.h"
+#include "LBMKernel.h"
 #include "UbLogger.h"
+#include "UbScheduler.h"
 
 #ifdef _OPENMP
 #include <omp.h>
@@ -48,34 +48,32 @@
 //#define TIMING
 //#include "UbTiming.h"
 
-BasicCalculator::BasicCalculator(SPtr<Grid3D> grid, SPtr<UbScheduler> additionalGhostLayerUpdateScheduler, int numberOfTimeSteps) :
-   Calculator(grid, additionalGhostLayerUpdateScheduler, numberOfTimeSteps)
+BasicCalculator::BasicCalculator(SPtr<Grid3D> grid, SPtr<UbScheduler> additionalGhostLayerUpdateScheduler,
+                                 int numberOfTimeSteps)
+    : Calculator(grid, additionalGhostLayerUpdateScheduler, numberOfTimeSteps)
 {
-
 }
 //////////////////////////////////////////////////////////////////////////
 void BasicCalculator::calculate()
 {
-   UBLOG(logDEBUG1, "OMPCalculator::calculate() - started");
-   int calcStep = 0;
-   try
-   {
-      int minInitLevel = minLevel;
-      int maxInitLevel = maxLevel - minLevel;
-      int straightStartLevel = minInitLevel;
-      int internalIterations = 1 << (maxInitLevel - minInitLevel);
-      int threshold;
+    UBLOG(logDEBUG1, "OMPCalculator::calculate() - started");
+    int calcStep = 0;
+    try {
+        int minInitLevel       = minLevel;
+        int maxInitLevel       = maxLevel - minLevel;
+        int straightStartLevel = minInitLevel;
+        int internalIterations = 1 << (maxInitLevel - minInitLevel);
+        int threshold;
 
 #ifdef TIMING
-      UbTimer timer;
-      double time[6];
+        UbTimer timer;
+        double time[6];
 #endif
 
-      for (calcStep = startTimeStep; calcStep <= numberOfTimeSteps; calcStep++)
-      {
-         //////////////////////////////////////////////////////////////////////////
+        for (calcStep = startTimeStep; calcStep <= numberOfTimeSteps; calcStep++) {
+            //////////////////////////////////////////////////////////////////////////
 #ifdef TIMING
-         UBLOG(logINFO, "calcStep = " << calcStep);
+            UBLOG(logINFO, "calcStep = " << calcStep);
 #endif
          //////////////////////////////////////////////////////////////////////////
 
@@ -87,95 +85,86 @@ void BasicCalculator::calculate()
                for (straightStartLevel = maxInitLevel, threshold = 1;
                   (staggeredStep & threshold) != threshold; straightStartLevel--, threshold <<= 1);
             }
-            //////////////////////////////////////////////////////////////////////////
 #ifdef TIMING
-            timer.resetAndStart();
+                timer.resetAndStart();
 #endif
-            //////////////////////////////////////////////////////////////////////////
-            applyPreCollisionBC(straightStartLevel, maxInitLevel);
+                //////////////////////////////////////////////////////////////////////////
+                applyPreCollisionBC(straightStartLevel, maxInitLevel);
 
-            //do collision for all blocks
-            calculateBlocks(straightStartLevel, maxInitLevel, calcStep);
-            //////////////////////////////////////////////////////////////////////////
+                // do collision for all blocks
+                calculateBlocks(straightStartLevel, maxInitLevel, calcStep);
+                //////////////////////////////////////////////////////////////////////////
 #ifdef TIMING
-            time[0] = timer.stop();
-            UBLOG(logINFO, "calculateBlocks time = " << time[0]);
+                time[0] = timer.stop();
+                UBLOG(logINFO, "calculateBlocks time = " << time[0]);
 #endif
-            //////////////////////////////////////////////////////////////////////////
-                        //////////////////////////////////////////////////////////////////////////
-                        //exchange data between blocks
-            exchangeBlockData(straightStartLevel, maxInitLevel);
-            //////////////////////////////////////////////////////////////////////////
+                //////////////////////////////////////////////////////////////////////////
+                //////////////////////////////////////////////////////////////////////////
+                // exchange data between blocks
+                exchangeBlockData(straightStartLevel, maxInitLevel);
+                //////////////////////////////////////////////////////////////////////////
 #ifdef TIMING
-            time[1] = timer.stop();
-            UBLOG(logINFO, "exchangeBlockData time = " << time[1]);
+                time[1] = timer.stop();
+                UBLOG(logINFO, "exchangeBlockData time = " << time[1]);
 #endif
-            //////////////////////////////////////////////////////////////////////////
-            applyPostCollisionBC(straightStartLevel, maxInitLevel);
-            //////////////////////////////////////////////////////////////////////////
+                //////////////////////////////////////////////////////////////////////////
+                applyPostCollisionBC(straightStartLevel, maxInitLevel);
+                //////////////////////////////////////////////////////////////////////////
 #ifdef TIMING
-            time[2] = timer.stop();
-            UBLOG(logINFO, "applyBCs time = " << time[2]);
+                time[2] = timer.stop();
+                UBLOG(logINFO, "applyBCs time = " << time[2]);
 #endif
-            //////////////////////////////////////////////////////////////////////////
-            //swap distributions in kernel
-            swapDistributions(straightStartLevel, maxInitLevel);
-            //////////////////////////////////////////////////////////////////////////
+                //////////////////////////////////////////////////////////////////////////
+                // swap distributions in kernel
+                swapDistributions(straightStartLevel, maxInitLevel);
+                //////////////////////////////////////////////////////////////////////////
 #ifdef TIMING
-            time[3] = timer.stop();
-            UBLOG(logINFO, "swapDistributions time = " << time[3]);
+                time[3] = timer.stop();
+                UBLOG(logINFO, "swapDistributions time = " << time[3]);
 #endif
-            //////////////////////////////////////////////////////////////////////////
-            if (refinement)
-            {
-               if (straightStartLevel < maxInitLevel)
-                  exchangeBlockData(straightStartLevel, maxInitLevel);
-               //////////////////////////////////////////////////////////////////////////
+                //////////////////////////////////////////////////////////////////////////
+                if (refinement) {
+                    if (straightStartLevel < maxInitLevel)
+                        exchangeBlockData(straightStartLevel, maxInitLevel);
+                        //////////////////////////////////////////////////////////////////////////
 #ifdef TIMING
-               time[4] = timer.stop();
-               UBLOG(logINFO, "refinement exchangeBlockData time = " << time[4]);
+                    time[4] = timer.stop();
+                    UBLOG(logINFO, "refinement exchangeBlockData time = " << time[4]);
 #endif
-               //////////////////////////////////////////////////////////////////////////
-               //now ghost nodes have actual values
-               //interpolation of interface nodes between grid levels
-               interpolation(straightStartLevel, maxInitLevel);
-               //////////////////////////////////////////////////////////////////////////
+                    //////////////////////////////////////////////////////////////////////////
+                    // now ghost nodes have actual values
+                    // interpolation of interface nodes between grid levels
+                    interpolation(straightStartLevel, maxInitLevel);
+                    //////////////////////////////////////////////////////////////////////////
 #ifdef TIMING
-               time[5] = timer.stop();
-               UBLOG(logINFO, "refinement interpolation time = " << time[5]);
+                    time[5] = timer.stop();
+                    UBLOG(logINFO, "refinement interpolation time = " << time[5]);
 #endif
-               //////////////////////////////////////////////////////////////////////////
+                    //////////////////////////////////////////////////////////////////////////
+                }
             }
-         }
-         //exchange data between blocks for visualization
-         if (additionalGhostLayerUpdateScheduler->isDue(calcStep))
-         {
-            exchangeBlockData(straightStartLevel, maxInitLevel);
-         }
-         coProcess((double)(calcStep));
-         //now ghost nodes have actual values
-      }
-      UBLOG(logDEBUG1, "OMPCalculator::calculate() - stoped");
-   }
-   catch (std::exception & e)
-   {
-      UBLOG(logERROR, e.what());
-      UBLOG(logERROR, " step = " << calcStep);
-      //throw e;
-      //exit(EXIT_FAILURE);
-   }
-   catch (std::string & s)
-   {
-      UBLOG(logERROR, s);
-      //exit(EXIT_FAILURE);
-      //throw s;
-   }
-   catch (...)
-   {
-      UBLOG(logERROR, "unknown exception");
-      //exit(EXIT_FAILURE);
-      //throw;
-   }
+            // exchange data between blocks for visualization
+            if (additionalGhostLayerUpdateScheduler->isDue(calcStep)) {
+                exchangeBlockData(straightStartLevel, maxInitLevel);
+            }
+            coProcess((double)(calcStep));
+            // now ghost nodes have actual values
+        }
+        UBLOG(logDEBUG1, "OMPCalculator::calculate() - stoped");
+    } catch (std::exception &e) {
+        UBLOG(logERROR, e.what());
+        UBLOG(logERROR, " step = " << calcStep);
+        // throw e;
+        // exit(EXIT_FAILURE);
+    } catch (std::string &s) {
+        UBLOG(logERROR, s);
+        // exit(EXIT_FAILURE);
+        // throw s;
+    } catch (...) {
+        UBLOG(logERROR, "unknown exception");
+        // exit(EXIT_FAILURE);
+        // throw;
+    }
 }
 //////////////////////////////////////////////////////////////////////////
 void BasicCalculator::calculateBlocks(int startLevel, int maxInitLevel, int calcStep)
@@ -183,50 +172,45 @@ void BasicCalculator::calculateBlocks(int startLevel, int maxInitLevel, int calc
 #ifdef _OPENMP
 #pragma omp parallel
 #endif
-   {
-      SPtr<Block3D> blockTemp;
-      //startLevel bis maxInitLevel
-      for (int level = startLevel; level <= maxInitLevel; level++)
-      {
-         //timer.resetAndStart();
-         //call LBM kernel
-         int size = (int)blocks[level].size();
+    {
+        SPtr<Block3D> blockTemp;
+        // startLevel bis maxInitLevel
+        for (int level = startLevel; level <= maxInitLevel; level++) {
+            // timer.resetAndStart();
+            // call LBM kernel
+            int size = (int)blocks[level].size();
 #ifdef _OPENMP
 #pragma omp for schedule(OMP_SCHEDULE)
 #endif
-         for (int i = 0; i < size; i++)
-         {
-            try
-            {
-               blockTemp = blocks[level][i];
-               blockTemp->getKernel()->calculate(calcStep);
+            for (int i = 0; i < size; i++) {
+                try {
+                    blockTemp = blocks[level][i];
+                    blockTemp->getKernel()->calculate(calcStep);
+                } catch (std::exception &e) {
+                    UBLOG(logERROR, e.what());
+                    UBLOG(logERROR, blockTemp->toString() << " step = " << calcStep);
+                    std::exit(EXIT_FAILURE);
+                }
             }
-            catch (std::exception & e)
-            {
-               UBLOG(logERROR, e.what());
-               UBLOG(logERROR, blockTemp->toString() << " step = " << calcStep);
-               std::exit(EXIT_FAILURE);
-            }
-         }
-         //timer.stop();
-         //UBLOG(logINFO, "level = " << level << " blocks = " << blocks[level].size() << " collision time = " << timer.getTotalTime());
-      }
-   }
+            // timer.stop();
+            // UBLOG(logINFO, "level = " << level << " blocks = " << blocks[level].size() << " collision time = " <<
+            // timer.getTotalTime());
+        }
+    }
 }
 //////////////////////////////////////////////////////////////////////////
 void BasicCalculator::exchangeBlockData(int startLevel, int maxInitLevel)
 {
-   //startLevel bis maxInitLevel
-   for (int level = startLevel; level <= maxInitLevel; level++)
-   {
-      //connectorsPrepareLocal(localConns[level]);
-      connectorsSendLocal(localConns[level]);
-      //connectorsReceiveLocal(localConns[level]);
+    // startLevel bis maxInitLevel
+    for (int level = startLevel; level <= maxInitLevel; level++) {
+        // connectorsPrepareLocal(localConns[level]);
+        connectorsSendLocal(localConns[level]);
+        // connectorsReceiveLocal(localConns[level]);
 
-      connectorsPrepareRemote(remoteConns[level]);
-      connectorsSendRemote(remoteConns[level]);
-      connectorsReceiveRemote(remoteConns[level]);
-   }
+        connectorsPrepareRemote(remoteConns[level]);
+        connectorsSendRemote(remoteConns[level]);
+        connectorsReceiveRemote(remoteConns[level]);
+    }
 }
 //////////////////////////////////////////////////////////////////////////
 void BasicCalculator::swapDistributions(int startLevel, int maxInitLevel)
@@ -234,192 +218,156 @@ void BasicCalculator::swapDistributions(int startLevel, int maxInitLevel)
 #ifdef _OPENMP
 #pragma omp parallel
 #endif
-   {
-      //startLevel bis maxInitLevel
-      for (int level = startLevel; level <= maxInitLevel; level++)
-      {
-         int size = (int)blocks[level].size();
+    {
+        // startLevel bis maxInitLevel
+        for (int level = startLevel; level <= maxInitLevel; level++) {
+            int size = (int)blocks[level].size();
 #ifdef _OPENMP
 #pragma omp for schedule(OMP_SCHEDULE)
 #endif
-         for (int i = 0; i < size; i++)
-         {
-            blocks[level][i]->getKernel()->swapDistributions();
-         }
-      }
-   }
+            for (int i = 0; i < size; i++) {
+                blocks[level][i]->getKernel()->swapDistributions();
+            }
+        }
+    }
 }
 //////////////////////////////////////////////////////////////////////////
-void BasicCalculator::connectorsPrepareLocal(std::vector< SPtr<Block3DConnector> >& connectors)
+void BasicCalculator::connectorsPrepareLocal(std::vector<SPtr<Block3DConnector>> &connectors)
 {
-   int size = (int)connectors.size();
+    int size = (int)connectors.size();
 #ifdef _OPENMP
 #pragma omp parallel for schedule(OMP_SCHEDULE)
 #endif
-   for (int i = 0; i < size; i++)
-   {
-      try
-      {
-         connectors[i]->prepareForReceive();
-         connectors[i]->prepareForSend();
-      }
-      catch (std::exception & e)
-      {
-         UBLOG(logERROR, e.what());
-         std::exit(EXIT_FAILURE);
-      }
-   }
+    for (int i = 0; i < size; i++) {
+        try {
+            connectors[i]->prepareForReceive();
+            connectors[i]->prepareForSend();
+        } catch (std::exception &e) {
+            UBLOG(logERROR, e.what());
+            std::exit(EXIT_FAILURE);
+        }
+    }
 }
 //////////////////////////////////////////////////////////////////////////
-void BasicCalculator::connectorsSendLocal(std::vector< SPtr<Block3DConnector> >& connectors)
+void BasicCalculator::connectorsSendLocal(std::vector<SPtr<Block3DConnector>> &connectors)
 {
-   int size = (int)connectors.size();
+    int size = (int)connectors.size();
 #ifdef _OPENMP
 #pragma omp parallel for schedule(OMP_SCHEDULE)
 #endif
-   for (int i = 0; i < size; i++)
-   {
-      try
-      {
-         connectors[i]->fillSendVectors();
-         connectors[i]->sendVectors();
-      }
-      catch (std::exception & e)
-      {
-         UBLOG(logERROR, e.what());
-         std::exit(EXIT_FAILURE);
-      }
-   }
+    for (int i = 0; i < size; i++) {
+        try {
+            connectors[i]->fillSendVectors();
+            connectors[i]->sendVectors();
+        } catch (std::exception &e) {
+            UBLOG(logERROR, e.what());
+            std::exit(EXIT_FAILURE);
+        }
+    }
 }
 //////////////////////////////////////////////////////////////////////////
-void BasicCalculator::connectorsReceiveLocal(std::vector< SPtr<Block3DConnector> >& connectors)
+void BasicCalculator::connectorsReceiveLocal(std::vector<SPtr<Block3DConnector>> &connectors)
 {
-   int size = (int)connectors.size();
+    int size = (int)connectors.size();
 #ifdef _OPENMP
 #pragma omp parallel for schedule(OMP_SCHEDULE)
 #endif
-   for (int i = 0; i < size; i++)
-   {
-      connectors[i]->receiveVectors();
-      connectors[i]->distributeReceiveVectors();
-   }
+    for (int i = 0; i < size; i++) {
+        connectors[i]->receiveVectors();
+        connectors[i]->distributeReceiveVectors();
+    }
 }
-void BasicCalculator::connectorsPrepareRemote(std::vector< SPtr<Block3DConnector> >& connectors)
+void BasicCalculator::connectorsPrepareRemote(std::vector<SPtr<Block3DConnector>> &connectors)
 {
-   int size = (int)connectors.size();
-   for (int i = 0; i < size; i++)
-   {
-      connectors[i]->prepareForReceive();
-      connectors[i]->prepareForSend();
-   }
+    int size = (int)connectors.size();
+    for (int i = 0; i < size; i++) {
+        connectors[i]->prepareForReceive();
+        connectors[i]->prepareForSend();
+    }
 }
 //////////////////////////////////////////////////////////////////////////
-void BasicCalculator::connectorsSendRemote(std::vector< SPtr<Block3DConnector> >& connectors)
+void BasicCalculator::connectorsSendRemote(std::vector<SPtr<Block3DConnector>> &connectors)
 {
-   int size = (int)connectors.size();
-   for (int i = 0; i < size; i++)
-   {
-      connectors[i]->fillSendVectors();
-      connectors[i]->sendVectors();
-   }
+    int size = (int)connectors.size();
+    for (int i = 0; i < size; i++) {
+        connectors[i]->fillSendVectors();
+        connectors[i]->sendVectors();
+    }
 }
 //////////////////////////////////////////////////////////////////////////
-void BasicCalculator::connectorsReceiveRemote(std::vector< SPtr<Block3DConnector> >& connectors)
+void BasicCalculator::connectorsReceiveRemote(std::vector<SPtr<Block3DConnector>> &connectors)
 {
-   int size = (int)connectors.size();
-   for (int i = 0; i < size; i++)
-   {
-      connectors[i]->receiveVectors();
-      connectors[i]->distributeReceiveVectors();
-   }
+    int size = (int)connectors.size();
+    for (int i = 0; i < size; i++) {
+        connectors[i]->receiveVectors();
+        connectors[i]->distributeReceiveVectors();
+    }
 }
 //////////////////////////////////////////////////////////////////////////
 void BasicCalculator::interpolation(int startLevel, int maxInitLevel)
 {
-   for (int level = startLevel; level < maxInitLevel; level++)
-   {
-      connectorsPrepareLocal(localInterConns[level]);
-      connectorsPrepareRemote(remoteInterConns[level]);
-   }
+    for (int level = startLevel; level < maxInitLevel; level++) {
+        connectorsPrepareLocal(localInterConns[level]);
+        connectorsPrepareRemote(remoteInterConns[level]);
+    }
 
-   for (int level = startLevel; level < maxInitLevel; level++)
-   {
-      connectorsSendLocal(localInterConns[level]);
-      connectorsSendRemote(remoteInterConns[level]);
-   }
+    for (int level = startLevel; level < maxInitLevel; level++) {
+        connectorsSendLocal(localInterConns[level]);
+        connectorsSendRemote(remoteInterConns[level]);
+    }
 
-   for (int level = startLevel; level < maxInitLevel; level++)
-   {
-      connectorsReceiveLocal(localInterConns[level]);
-      connectorsReceiveRemote(remoteInterConns[level]);
-   }
+    for (int level = startLevel; level < maxInitLevel; level++) {
+        connectorsReceiveLocal(localInterConns[level]);
+        connectorsReceiveRemote(remoteInterConns[level]);
+    }
 }
 //////////////////////////////////////////////////////////////////////////
 void BasicCalculator::applyPreCollisionBC(int startLevel, int maxInitLevel)
 {
-   //startLevel bis maxInitLevel
-   for (int level = startLevel; level <= maxInitLevel; level++)
-   {
-      int size = (int)blocks[level].size();
+    // startLevel bis maxInitLevel
+    for (int level = startLevel; level <= maxInitLevel; level++) {
+        int size = (int)blocks[level].size();
 #ifdef _OPENMP
 #pragma omp parallel for schedule(OMP_SCHEDULE)
 #endif
-      for (int i = 0; i < size; i++)
-      {
-         try 
-         {
-            blocks[level][i]->getKernel()->getBCProcessor()->applyPreCollisionBC();
-         }
-         catch (std::exception & e)
-         {
-            UBLOG(logERROR, e.what());
-            exit(EXIT_FAILURE);
-         }
-         catch (std::string & s)
-         {
-            UBLOG(logERROR, s);
-            exit(EXIT_FAILURE);
-         }
-         catch (...)
-         {
-            UBLOG(logERROR, "unknown exception");
-            exit(EXIT_FAILURE);
-         }
-      }
-   }
+        for (int i = 0; i < size; i++) {
+            try {
+                blocks[level][i]->getKernel()->getBCProcessor()->applyPreCollisionBC();
+            } catch (std::exception &e) {
+                UBLOG(logERROR, e.what());
+                exit(EXIT_FAILURE);
+            } catch (std::string &s) {
+                UBLOG(logERROR, s);
+                exit(EXIT_FAILURE);
+            } catch (...) {
+                UBLOG(logERROR, "unknown exception");
+                exit(EXIT_FAILURE);
+            }
+        }
+    }
 }
 //////////////////////////////////////////////////////////////////////////
 void BasicCalculator::applyPostCollisionBC(int startLevel, int maxInitLevel)
 {
-   //startLevel bis maxInitLevel
-   for (int level = startLevel; level <= maxInitLevel; level++)
-   {
-      int size = (int)blocks[level].size();
+    // startLevel bis maxInitLevel
+    for (int level = startLevel; level <= maxInitLevel; level++) {
+        int size = (int)blocks[level].size();
 #ifdef _OPENMP
 #pragma omp parallel for schedule(OMP_SCHEDULE)
 #endif
-      for (int i = 0; i < size; i++)
-      {
-         try 
-         {
-            blocks[level][i]->getKernel()->getBCProcessor()->applyPostCollisionBC();
-         }
-         catch (std::exception & e)
-         {
-            UBLOG(logERROR, e.what());
-            exit(EXIT_FAILURE);
-         }
-         catch (std::string & s)
-         {
-            UBLOG(logERROR, s);
-            exit(EXIT_FAILURE);
-         }
-         catch (...)
-         {
-            UBLOG(logERROR, "unknown exception");
-            exit(EXIT_FAILURE);
-         }
-      }
-   }
+        for (int i = 0; i < size; i++) {
+            try {
+                blocks[level][i]->getKernel()->getBCProcessor()->applyPostCollisionBC();
+            } catch (std::exception &e) {
+                UBLOG(logERROR, e.what());
+                exit(EXIT_FAILURE);
+            } catch (std::string &s) {
+                UBLOG(logERROR, s);
+                exit(EXIT_FAILURE);
+            } catch (...) {
+                UBLOG(logERROR, "unknown exception");
+                exit(EXIT_FAILURE);
+            }
+        }
+    }
 }
-
diff --git a/src/cpu/VirtualFluidsCore/Grid/Grid3D.cpp b/src/cpu/VirtualFluidsCore/Grid/Grid3D.cpp
index 520da83f6f7048ad2ff019051bd7cee8d188c60a..199d2cf87851160a4fc36e9a90ae2b199f1fce7e 100644
--- a/src/cpu/VirtualFluidsCore/Grid/Grid3D.cpp
+++ b/src/cpu/VirtualFluidsCore/Grid/Grid3D.cpp
@@ -55,7 +55,7 @@ Grid3D::Grid3D(SPtr<Communicator> comm)
 {
     levelSet.resize(Grid3DSystem::MAXLEVEL + 1);
     bundle = comm->getBundleID();
-    rank   = comm->getProcessID();
+    rank = comm->getProcessID();
 }
 //////////////////////////////////////////////////////////////////////////
 Grid3D::Grid3D(SPtr<Communicator> comm, int blockNx1, int blockNx2, int blockNx3, int gridNx1, int gridNx2, int gridNx3)
@@ -65,8 +65,8 @@ Grid3D::Grid3D(SPtr<Communicator> comm, int blockNx1, int blockNx2, int blockNx3
 {
     levelSet.resize(Grid3DSystem::MAXLEVEL + 1);
     bundle = comm->getBundleID();
-    rank   = comm->getProcessID();
-    trafo  = std::make_shared<CoordinateTransformation3D>(0.0, 0.0, 0.0, (double)blockNx1, (double)blockNx2,
+    rank  = comm->getProcessID();
+    trafo = std::make_shared<CoordinateTransformation3D>(0.0, 0.0, 0.0, (double)blockNx1, (double)blockNx2,
                                                          (double)blockNx3);
     UbTupleInt3 minInd(0, 0, 0);
     UbTupleInt3 maxInd(gridNx1, gridNx2, gridNx3);
@@ -218,11 +218,6 @@ SPtr<Block3D> Grid3D::getBlock(int id) const
     return it->second;
 }
 //////////////////////////////////////////////////////////////////////////
-// const Grid3D::Block3DMap& Grid3D::getBlocks(int level)
-//{
-//   return levelSet[level];
-//}
-//////////////////////////////////////////////////////////////////////////
 Grid3D::BlockIDMap &Grid3D::getBlockIDs() { return blockIdMap; }
 //////////////////////////////////////////////////////////////////////////
 SPtr<Block3D> Grid3D::getSuperBlock(SPtr<Block3D> block)
@@ -298,8 +293,6 @@ bool Grid3D::expandBlock(int ix1, int ix2, int ix3, int level)
         throw UbException(UB_EXARGS, "block(x1=" + UbSystem::toString(ix1) + ", x2=" + UbSystem::toString(ix2) +
                                          ", x3=" + UbSystem::toString(ix3) + ", l=" + UbSystem::toString(level) +
                                          ") is not exist");
-    // if(!block->isActive()) throw UbException(UB_EXARGS,"block(x1="+UbSystem::toString(ix1)+",
-    // x2="+UbSystem::toString(ix2)+", x3="+UbSystem::toString(ix3)+", l="+UbSystem::toString(level)+") is not active");
 
     // da bei periodic der eigentliche block andere indizes hat:
     ix1 = block->getX1();
@@ -415,7 +408,6 @@ void Grid3D::deleteConnectors()
         for (Block3DMap::value_type b : blockMap) {
             SPtr<Block3D> block = b.second;
             block->deleteConnectors();
-            // block->deleteInterpolationConnectors();
         }
     }
 }
@@ -2305,6 +2297,7 @@ void Grid3D::renumberBlockIDs()
     }
 }
 
+
 //////////////////////////////////////////////////////////////////////////
 void Grid3D::updateDistributedBlocks(SPtr<Communicator> comm)
 {
diff --git a/src/cpu/VirtualFluidsCore/Grid/Grid3D.h b/src/cpu/VirtualFluidsCore/Grid/Grid3D.h
index b954a4361df5b97b91d111e80c30b413a0b9ed05..f3aa968316fcc74f77584ad58ae7114dcab0840c 100644
--- a/src/cpu/VirtualFluidsCore/Grid/Grid3D.h
+++ b/src/cpu/VirtualFluidsCore/Grid/Grid3D.h
@@ -50,10 +50,10 @@ class CoordinateTransformation3D;
 class Communicator;
 class Block3D;
 class Interactor3D;
-// class Grid3DVisitor;
 
 #define OFFSET 0.5
 
+//! A class implements block grid
 //////////////////////////////////////////////////////////////////////////
 class Grid3D : public enableSharedFromThis<Grid3D>
 {
@@ -93,7 +93,6 @@ public:
     void getBlocks(int level, int rank, bool active, std::vector<SPtr<Block3D>> &blockVector);
     int getNumberOfBlocks();
     int getNumberOfBlocks(int level);
-    // const Block3DMap& getBlocks(int level);
     BlockIDMap &getBlockIDs();
     void deleteBlockIDs();
     void renumberBlockIDs();
diff --git a/src/cpu/VirtualFluidsCore/LBM/CumulantK17LBMKernel.cpp b/src/cpu/VirtualFluidsCore/LBM/CumulantK17LBMKernel.cpp
index 1f647e73d434c9b19f2133dea34588bf201eef11..daed493b9cc1afddbd92acabcd551da0f463ea26 100644
--- a/src/cpu/VirtualFluidsCore/LBM/CumulantK17LBMKernel.cpp
+++ b/src/cpu/VirtualFluidsCore/LBM/CumulantK17LBMKernel.cpp
@@ -1,28 +1,28 @@
 //=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __         
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |        
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |        
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |        
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____    
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|   
-//      \    \  |    |   ________________________________________________________________    
-//       \    \ |    |  |  ______________________________________________________________|   
-//        \    \|    |  |  |         __          __     __     __     ______      _______    
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)   
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______    
+// ____          ____    __    ______     __________   __      __       __        __
+// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
+//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
+//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
+//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
+//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
+//      \    \  |    |   ________________________________________________________________
+//       \    \ |    |  |  ______________________________________________________________|
+//        \    \|    |  |  |         __          __     __     __     ______      _______
+//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
+//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
 //           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/   
+//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
 //
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can 
+//  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 
+//  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 
+//
+//  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/>.
 //
@@ -30,7 +30,6 @@
 //! \ingroup LBM
 //! \author Konstantin Kutscher, Martin Geier
 //=======================================================================================
-
 #include "CumulantK17LBMKernel.h"
 #include "D3Q27System.h"
 #include "D3Q27EsoTwist3DSplittedVector.h"
@@ -47,593 +46,590 @@ using namespace UbMath;
 //////////////////////////////////////////////////////////////////////////
 CumulantK17LBMKernel::CumulantK17LBMKernel()
 {
-   this->compressible = true;
+    this->compressible = true;
 }
 //////////////////////////////////////////////////////////////////////////
-CumulantK17LBMKernel::~CumulantK17LBMKernel(void)
-= default;
-//////////////////////////////////////////////////////////////////////////
 void CumulantK17LBMKernel::initDataSet()
 {
-   SPtr<DistributionArray3D> d(new D3Q27EsoTwist3DSplittedVector(nx[0] + 2, nx[1] + 2, nx[2] + 2, -999.9));
-   dataSet->setFdistributions(d);
+    SPtr<DistributionArray3D> d(new D3Q27EsoTwist3DSplittedVector(nx[0] + 2, nx[1] + 2, nx[2] + 2, -999.9));
+    dataSet->setFdistributions(d);
 }
 //////////////////////////////////////////////////////////////////////////
 SPtr<LBMKernel> CumulantK17LBMKernel::clone()
 {
-   SPtr<LBMKernel> kernel(new CumulantK17LBMKernel());
-   kernel->setNX(nx);
-   std::dynamic_pointer_cast<CumulantK17LBMKernel>(kernel)->initDataSet();
-   kernel->setCollisionFactor(this->collFactor);
-   kernel->setBCProcessor(bcProcessor->clone(kernel));
-   kernel->setWithForcing(withForcing);
-   kernel->setForcingX1(muForcingX1);
-   kernel->setForcingX2(muForcingX2);
-   kernel->setForcingX3(muForcingX3);
-   kernel->setIndex(ix1, ix2, ix3);
-   kernel->setDeltaT(deltaT);
-   kernel->setBlock(block.lock());
-
-   return kernel;
+    SPtr<LBMKernel> kernel(new CumulantK17LBMKernel());
+    kernel->setNX(nx);
+    std::dynamic_pointer_cast<CumulantK17LBMKernel>(kernel)->initDataSet();
+    kernel->setCollisionFactor(this->collFactor);
+    kernel->setBCProcessor(bcProcessor->clone(kernel));
+    kernel->setWithForcing(withForcing);
+    kernel->setForcingX1(muForcingX1);
+    kernel->setForcingX2(muForcingX2);
+    kernel->setForcingX3(muForcingX3);
+    kernel->setIndex(ix1, ix2, ix3);
+    kernel->setDeltaT(deltaT);
+    kernel->setBlock(block.lock());
+
+    return kernel;
 }
 //////////////////////////////////////////////////////////////////////////
 void CumulantK17LBMKernel::calculate(int step)
 {
-   //////////////////////////////////////////////////////////////////////////
-	//! Cumulant K17 Kernel is based on
-   //! <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>
-	//! and 
-	//! <a href="https://doi.org/10.1016/j.jcp.2017.07.004"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.07.004 ]</b></a>
-	//!
-	//! The cumulant kernel is executed in the following steps
-	//!
-	////////////////////////////////////////////////////////////////////////////////
-	//! - Get node index coordinates from thredIdx, blockIdx, blockDim and gridDim.
-	//!
-
-   using namespace std;
-
-   //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);
-
-      muDeltaT = deltaT;
-
-      muForcingX1.DefineVar("dt", &muDeltaT);
-      muForcingX2.DefineVar("dt", &muDeltaT);
-      muForcingX3.DefineVar("dt", &muDeltaT);
-
-      muNu = (1.0 / 3.0) * (1.0 / collFactor - 1.0 / 2.0);
-
-      muForcingX1.DefineVar("nu", &muNu);
-      muForcingX2.DefineVar("nu", &muNu);
-      muForcingX3.DefineVar("nu", &muNu);
-   }
-   /////////////////////////////////////
-
-   localDistributions = dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions();
-   nonLocalDistributions = dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions();
-   restDistributions = dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions();
-
-   SPtr<BCArray3D> bcArray = this->getBCProcessor()->getBCArray();
-
-   const int bcArrayMaxX1 = (int)bcArray->getNX1();
-   const int bcArrayMaxX2 = (int)bcArray->getNX2();
-   const int bcArrayMaxX3 = (int)bcArray->getNX3();
-
-   int minX1 = ghostLayerWidth;
-   int minX2 = ghostLayerWidth;
-   int minX3 = ghostLayerWidth;
-   int maxX1 = bcArrayMaxX1 - ghostLayerWidth;
-   int maxX2 = bcArrayMaxX2 - ghostLayerWidth;
-   int maxX3 = bcArrayMaxX3 - ghostLayerWidth;
-
-   LBMReal omega = collFactor;
-
-   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))
+    //////////////////////////////////////////////////////////////////////////
+    //! Cumulant K17 Kernel is based on
+    //! <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>
+    //! and
+    //! <a href="https://doi.org/10.1016/j.jcp.2017.07.004"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.07.004 ]</b></a>
+    //!
+    //! The cumulant kernel is executed in the following steps
+    //!
+    ////////////////////////////////////////////////////////////////////////////////
+    //! - Get node index coordinates from thredIdx, blockIdx, blockDim and gridDim.
+    //!
+
+    using namespace std;
+
+    //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);
+
+        muDeltaT = deltaT;
+
+        muForcingX1.DefineVar("dt", &muDeltaT);
+        muForcingX2.DefineVar("dt", &muDeltaT);
+        muForcingX3.DefineVar("dt", &muDeltaT);
+
+        muNu = (1.0 / 3.0) * (1.0 / collFactor - 1.0 / 2.0);
+
+        muForcingX1.DefineVar("nu", &muNu);
+        muForcingX2.DefineVar("nu", &muNu);
+        muForcingX3.DefineVar("nu", &muNu);
+    }
+    /////////////////////////////////////
+
+    localDistributions = dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions();
+    nonLocalDistributions = dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions();
+    restDistributions = dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions();
+
+    SPtr<BCArray3D> bcArray = this->getBCProcessor()->getBCArray();
+
+    const int bcArrayMaxX1 = (int)bcArray->getNX1();
+    const int bcArrayMaxX2 = (int)bcArray->getNX2();
+    const int bcArrayMaxX3 = (int)bcArray->getNX3();
+
+    int minX1 = ghostLayerWidth;
+    int minX2 = ghostLayerWidth;
+    int minX3 = ghostLayerWidth;
+    int maxX1 = bcArrayMaxX1 - ghostLayerWidth;
+    int maxX2 = bcArrayMaxX2 - ghostLayerWidth;
+    int maxX3 = bcArrayMaxX3 - ghostLayerWidth;
+
+    LBMReal omega = collFactor;
+
+    for (int x3 = minX3; x3 < maxX3; x3++)
+    {
+        for (int x2 = minX2; x2 < maxX2; x2++)
+        {
+            for (int x1 = minX1; x1 < maxX1; x1++)
             {
-               int x1p = x1 + 1;
-               int x2p = x2 + 1;
-               int x3p = x3 + 1;
-               //////////////////////////////////////////////////////////////////////////
-               //////////////////////////////////////////////////////////////////////////
-			      //! - 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>
-			      //!
-               ////////////////////////////////////////////////////////////////////////////
-               //////////////////////////////////////////////////////////////////////////
-
-               //E   N  T
-               //c   c  c
-               //////////
-               //W   S  B
-               //a   a  a
-
-               //Rest is b
-
-               //mfxyz
-               //a - negative
-               //b - null
-               //c - positive
-
-               // a b c
-               //-1 0 1
-
-               LBMReal mfcbb = (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3);
-               LBMReal mfbcb = (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3);
-               LBMReal mfbbc = (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3);
-               LBMReal mfccb = (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3);
-               LBMReal mfacb = (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3);
-               LBMReal mfcbc = (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3);
-               LBMReal mfabc = (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3);
-               LBMReal mfbcc = (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3);
-               LBMReal mfbac = (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3);
-               LBMReal mfccc = (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3);
-               LBMReal mfacc = (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3);
-               LBMReal mfcac = (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3);
-               LBMReal mfaac = (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-               LBMReal mfabb = (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3);
-               LBMReal mfbab = (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3);
-               LBMReal mfbba = (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p);
-               LBMReal mfaab = (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3);
-               LBMReal mfcab = (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3);
-               LBMReal mfaba = (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p);
-               LBMReal mfcba = (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p);
-               LBMReal mfbaa = (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p);
-               LBMReal mfbca = (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p);
-               LBMReal mfaaa = (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-               LBMReal mfcaa = (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p);
-               LBMReal mfaca = (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p);
-               LBMReal mfcca = (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-               LBMReal mfbbb = (*this->restDistributions)(x1, x2, x3);
-
-               ////////////////////////////////////////////////////////////////////////////////////
-               //! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. (J1)-(J3)
-			      //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-			      //!
-               LBMReal drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
-                  (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
-                  ((mfabb + mfcbb) + (mfbab + mfbcb)) + (mfbba + mfbbc)) + mfbbb;
-
-               LBMReal rho = c1 + drho;
-               LBMReal OOrho = c1 / rho;
-               ////////////////////////////////////////////////////////////////////////////////////
-               LBMReal vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
-                  (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
-                  (mfcbb - mfabb)) / rho;
-               LBMReal vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
-                  (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
-                  (mfbcb - mfbab)) / rho;
-               LBMReal vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
-                  (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
-                  (mfbbc - mfbba)) / rho;
-               ////////////////////////////////////////////////////////////////////////////////////
-               //forcing 
-               ///////////////////////////////////////////////////////////////////////////////////////////
-               if (withForcing)
-               {
-                  muX1 = static_cast<double>(x1 - 1 + ix1 * maxX1);
-                  muX2 = static_cast<double>(x2 - 1 + ix2 * maxX2);
-                  muX3 = static_cast<double>(x3 - 1 + ix3 * maxX3);
-
-                  forcingX1 = muForcingX1.Eval();
-                  forcingX2 = muForcingX2.Eval();
-                  forcingX3 = muForcingX3.Eval();
-
-                  ////////////////////////////////////////////////////////////////////////////////////
-			         //! - Add half of the acceleration (body force) to the velocity as in Eq. (42)
-			         //! <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>
-			         //!
-                  vvx += forcingX1 * deltaT * c1o2; // X
-                  vvy += forcingX2 * deltaT * c1o2; // Y
-                  vvz += forcingX3 * deltaT * c1o2; // Z
-               }
-			      ////////////////////////////////////////////////////////////////////////////////////
-			      // calculate the square of velocities for this lattice node
-               LBMReal vx2 = vvx * vvx;
-               LBMReal vy2 = vvy * vvy;
-               LBMReal vz2 = vvz * vvz;
-			      ////////////////////////////////////////////////////////////////////////////////////
-			      //! - Set relaxation limiters for third order cumulants to default value \f$ \lambda=0.001 \f$ according to section 6 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>
-			      //!
-               LBMReal wadjust;
-               LBMReal qudricLimitP = c1o100;
-               LBMReal qudricLimitM = c1o100;
-               LBMReal qudricLimitD = c1o100;
-			      ////////////////////////////////////////////////////////////////////////////////////
-			      //! - Chimera transform from well conditioned distributions to central moments as defined in Appendix J in
-			      //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-			      //! see also Eq. (6)-(14) 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>
-			      //!
-               ////////////////////////////////////////////////////////////////////////////////////
-               // Z - Dir
-               forwardInverseChimeraWithK(mfaaa, mfaab, mfaac, vvz, vz2, c36, c1o36);
-               forwardInverseChimeraWithK(mfaba, mfabb, mfabc, vvz, vz2, c9, c1o9);
-               forwardInverseChimeraWithK(mfaca, mfacb, mfacc, vvz, vz2, c36, c1o36);
-               forwardInverseChimeraWithK(mfbaa, mfbab, mfbac, vvz, vz2, c9, c1o9);
-               forwardInverseChimeraWithK(mfbba, mfbbb, mfbbc, vvz, vz2, c9o4, c4o9);
-               forwardInverseChimeraWithK(mfbca, mfbcb, mfbcc, vvz, vz2, c9, c1o9);
-               forwardInverseChimeraWithK(mfcaa, mfcab, mfcac, vvz, vz2, c36, c1o36);
-               forwardInverseChimeraWithK(mfcba, mfcbb, mfcbc, vvz, vz2, c9, c1o9);
-               forwardInverseChimeraWithK(mfcca, mfccb, mfccc, vvz, vz2, c36, c1o36);
-
-               ////////////////////////////////////////////////////////////////////////////////////
-               // Y - Dir
-               forwardInverseChimeraWithK(mfaaa, mfaba, mfaca, vvy, vy2, c6, c1o6);
-               forwardChimera(mfaab, mfabb, mfacb, vvy, vy2);
-               forwardInverseChimeraWithK(mfaac, mfabc, mfacc, vvy, vy2, c18, c1o18);
-               forwardInverseChimeraWithK(mfbaa, mfbba, mfbca, vvy, vy2, c3o2, c2o3);
-               forwardChimera(mfbab, mfbbb, mfbcb, vvy, vy2);
-               forwardInverseChimeraWithK(mfbac, mfbbc, mfbcc, vvy, vy2, c9o2, c2o9);
-               forwardInverseChimeraWithK(mfcaa, mfcba, mfcca, vvy, vy2, c6, c1o6);
-               forwardChimera(mfcab, mfcbb, mfccb, vvy, vy2);
-               forwardInverseChimeraWithK(mfcac, mfcbc, mfccc, vvy, vy2, c18, c1o18);
-
-               ////////////////////////////////////////////////////////////////////////////////////
-               // X - Dir
-               forwardInverseChimeraWithK(mfaaa, mfbaa, mfcaa, vvx, vx2, c1, c1);
-               forwardChimera(mfaba, mfbba, mfcba, vvx, vx2);
-               forwardInverseChimeraWithK(mfaca, mfbca, mfcca, vvx, vx2, c3, c1o3);
-               forwardChimera(mfaab, mfbab, mfcab, vvx, vx2);
-               forwardChimera(mfabb, mfbbb, mfcbb, vvx, vx2);
-               forwardChimera(mfacb, mfbcb, mfccb, vvx, vx2);
-               forwardInverseChimeraWithK(mfaac, mfbac, mfcac, vvx, vx2, c3, c1o3);
-               forwardChimera(mfabc, mfbbc, mfcbc, vvx, vx2);
-               forwardInverseChimeraWithK(mfacc, mfbcc, mfccc, vvx, vx2, c9, 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} \f$, \f$ C_{210}+C_{012} \f$, \f$ 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} \f$, \f$ C_{210}-C_{012} \f$, \f$ 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} \f$, \f$ C_{202} \f$, \f$ C_{022} \f$, \f$ C_{211} \f$, \f$ C_{121} \f$, \f$ 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}\f$, \f$C_{212}\f$, \f$C_{122}\f$: \f$\omega_9=O5=1.0\f$.
-			      //!  - Sixth order cumulant \f$ C_{222}\f$: \f$\omega_{10}=O6=1.0\f$.
-			      //!
-			      ////////////////////////////////////////////////////////////
-			      //2.
-			      LBMReal OxxPyyPzz = c1;
-			      ////////////////////////////////////////////////////////////
-			      //3.
-			      LBMReal OxyyPxzz = c8  * (-c2 + omega) * ( c1 + c2*omega) / (-c8 - c14*omega + c7*omega*omega);
-			      LBMReal OxyyMxzz = c8  * (-c2 + omega) * (-c7 + c4*omega) / (c56 - c50*omega + c9*omega*omega);
-			      LBMReal Oxyz     = c24 * (-c2 + omega) * (-c2 - c7*omega + c3*omega*omega) / (c48 + c152*omega - c130*omega*omega + c29*omega*omega*omega);
-			      ////////////////////////////////////////////////////////////
-			      //4.
-			      LBMReal O4 = c1;
-			      ////////////////////////////////////////////////////////////
-			      //5.
-			      LBMReal O5 = c1;
-			      ////////////////////////////////////////////////////////////
-			      //6.
-			      LBMReal O6 = c1;
-
-			      ////////////////////////////////////////////////////////////////////////////////////
-			      //! - A and B: parameters for fourth order convergence of the diffusion term according to Eq. (114) and (115)
-			      //! <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).
-			      //!
-			      LBMReal A = (c4 + c2*omega - c3*omega*omega) / (c2 - c7*omega + c5*omega*omega);
-			      LBMReal B = (c4 + c28*omega - c14*omega*omega) / (c6 - c21*omega + c15*omega*omega);
-
-			      ////////////////////////////////////////////////////////////////////////////////////
-			      //! - Compute cumulants from central moments according to Eq. (20)-(23) 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>
-			      //!
-			      ////////////////////////////////////////////////////////////
-               //4.
-               LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + c2 * mfbba * mfbab) * OOrho;
-               LBMReal CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + c2 * mfbba * mfabb) * OOrho;
-               LBMReal CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + c2 * mfbab * mfabb) * OOrho;
-
-               LBMReal CUMcca = mfcca - (((mfcaa * mfaca + c2 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) * OOrho - c1o9 * (drho * OOrho));
-               LBMReal CUMcac = mfcac - (((mfcaa * mfaac + c2 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) * OOrho - c1o9 * (drho * OOrho));
-               LBMReal CUMacc = mfacc - (((mfaac * mfaca + c2 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) * OOrho - c1o9 * (drho * OOrho));
-               ////////////////////////////////////////////////////////////
-               //5.
-               LBMReal CUMbcc = mfbcc - ((mfaac * mfbca + mfaca * mfbac + c4 * mfabb * mfbbb + c2 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)) * OOrho;
-               LBMReal CUMcbc = mfcbc - ((mfaac * mfcba + mfcaa * mfabc + c4 * mfbab * mfbbb + c2 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)) * OOrho;
-               LBMReal CUMccb = mfccb - ((mfcaa * mfacb + mfaca * mfcab + c4 * mfbba * mfbbb + c2 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)) * OOrho;
-               ////////////////////////////////////////////////////////////
-               //6.
-               LBMReal CUMccc = mfccc + ((-c4 * mfbbb * mfbbb
-                     - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
-                     - c4 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc)
-                     - c2 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) * OOrho
-                     + (c4 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
-                     + c2 * (mfcaa * mfaca * mfaac)
-                     + c16 * mfbba * mfbab * mfabb) * OOrho * OOrho
-                     - c1o3 * (mfacc + mfcac + mfcca) * OOrho
-                     - c1o9 * (mfcaa + mfaca + mfaac) * OOrho
-                     + (c2 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
-                     + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 * (mfaac + mfaca + mfcaa)) * OOrho * OOrho * c2o3
-                     + c1o27 * ((drho * drho - drho) * OOrho * OOrho));
-
-			      ////////////////////////////////////////////////////////////////////////////////////
-			      //! - Compute linear combinations of second and third order cumulants
-			      //!
-			      ////////////////////////////////////////////////////////////
-               //2.
-               LBMReal mxxPyyPzz = mfcaa + mfaca + mfaac;
-               LBMReal mxxMyy = mfcaa - mfaca;
-               LBMReal mxxMzz = mfcaa - mfaac;
-			      ////////////////////////////////////////////////////////////
-			      //3.
-               LBMReal mxxyPyzz = mfcba + mfabc;
-               LBMReal mxxyMyzz = mfcba - mfabc;
-
-               LBMReal mxxzPyyz = mfcab + mfacb;
-               LBMReal mxxzMyyz = mfcab - mfacb;
-
-               LBMReal mxyyPxzz = mfbca + mfbac;
-               LBMReal mxyyMxzz = mfbca - mfbac;
-
-			      ////////////////////////////////////////////////////////////////////////////////////
-			      //incl. correction
-			      ////////////////////////////////////////////////////////////
-			      //! - Compute velocity  gradients from second order cumulants according to Eq. (27)-(32)
-			      //! <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>
-			      //! Further explanations of the correction in viscosity in Appendix H of
-			      //! <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>
-			      //! Note that the division by rho is omitted here as we need rho times the gradients later.
-			      //!
-               LBMReal Dxy = -c3 * omega * mfbba;
-               LBMReal Dxz = -c3 * omega * mfbab;
-               LBMReal Dyz = -c3 * omega * mfabb;
-               LBMReal dxux = c1o2 * (-omega) * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz);
-               LBMReal dyuy = dxux + omega * c3o2 * mxxMyy;
-               LBMReal dzuz = dxux + omega * c3o2 * mxxMzz;
-			      ////////////////////////////////////////////////////////////
-			      //! - 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 * (mfaaa - mxxPyyPzz) - c3 * (c1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);
-               mxxMyy += omega * (-mxxMyy) - c3 * (c1 + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy);
-               mxxMzz += omega * (-mxxMzz) - c3 * (c1 + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz);
-
-               /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-               ////no correction
-               //mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz);
-               //mxxMyy += -(-omega) * (-mxxMyy);
-               //mxxMzz += -(-omega) * (-mxxMzz);
-               /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-               mfabb += omega * (-mfabb);
-               mfbab += omega * (-mfbab);
-               mfbba += omega * (-mfbba);
-
-			      ////////////////////////////////////////////////////////////////////////////////////
-			      //relax
-			      //////////////////////////////////////////////////////////////////////////
-			      // incl. limiter
-			      //! - Relaxation of third order cumulants including limiter according to Eq. (116)-(123)
-			      //! <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>
-			      //!
-               wadjust = Oxyz + (c1 - Oxyz) * abs(mfbbb) / (abs(mfbbb) + qudricLimitD);
-               mfbbb += wadjust * (-mfbbb);
-               wadjust = OxyyPxzz + (c1 - OxyyPxzz) * abs(mxxyPyzz) / (abs(mxxyPyzz) + qudricLimitP);
-               mxxyPyzz += wadjust * (-mxxyPyzz);
-               wadjust = OxyyMxzz + (c1 - OxyyMxzz) * abs(mxxyMyzz) / (abs(mxxyMyzz) + qudricLimitM);
-               mxxyMyzz += wadjust * (-mxxyMyzz);
-               wadjust = OxyyPxzz + (c1 - OxyyPxzz) * abs(mxxzPyyz) / (abs(mxxzPyyz) + qudricLimitP);
-               mxxzPyyz += wadjust * (-mxxzPyyz);
-               wadjust = OxyyMxzz + (c1 - OxyyMxzz) * abs(mxxzMyyz) / (abs(mxxzMyyz) + qudricLimitM);
-               mxxzMyyz += wadjust * (-mxxzMyyz);
-               wadjust = OxyyPxzz + (c1 - OxyyPxzz) * abs(mxyyPxzz) / (abs(mxyyPxzz) + qudricLimitP);
-               mxyyPxzz += wadjust * (-mxyyPxzz);
-               wadjust = OxyyMxzz + (c1 - OxyyMxzz) * abs(mxyyMxzz) / (abs(mxyyMxzz) + qudricLimitM);
-               mxyyMxzz += wadjust * (-mxyyMxzz);
-               //////////////////////////////////////////////////////////////////////////
-               // no limiter
-               //mfbbb += OxyyMxzz * (-mfbbb);
-               //mxxyPyzz += OxyyPxzz * (-mxxyPyzz);
-               //mxxyMyzz += OxyyMxzz * (-mxxyMyzz);
-               //mxxzPyyz += OxyyPxzz * (-mxxzPyyz);
-               //mxxzMyyz += OxyyMxzz * (-mxxzMyyz);
-               //mxyyPxzz += OxyyPxzz * (-mxyyPxzz);
-               //mxyyMxzz += OxyyMxzz * (-mxyyMxzz);
-
-			      ////////////////////////////////////////////////////////////////////////////////////
-			      //! - Compute inverse linear combinations of second and third order cumulants
-			      //!
-               mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz);
-               mfaca = c1o3 * (-c2 * mxxMyy + mxxMzz + mxxPyyPzz);
-               mfaac = c1o3 * (mxxMyy - c2 * mxxMzz + mxxPyyPzz);
-
-               mfcba = (mxxyMyzz + mxxyPyzz) * c1o2;
-               mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2;
-               mfcab = (mxxzMyyz + mxxzPyyz) * c1o2;
-               mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2;
-               mfbca = (mxyyMxzz + mxyyPxzz) * c1o2;
-               mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2;
-               //////////////////////////////////////////////////////////////////////////
-
-			      //////////////////////////////////////////////////////////////////////////
-			      //4.
-			      // no limiter
-			      //! - Relax fourth order cumulants to modified equilibrium for fourth order convergence of diffusion according to Eq. (43)-(48)
-			      //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a>
-			      //!
-               CUMacc = -O4 * (c1 / omega - c1o2) * (dyuy + dzuz) * c2o3 * A + (c1 - O4) * (CUMacc);
-               CUMcac = -O4 * (c1 / omega - c1o2) * (dxux + dzuz) * c2o3 * A + (c1 - O4) * (CUMcac);
-               CUMcca = -O4 * (c1 / omega - c1o2) * (dyuy + dxux) * c2o3 * A + (c1 - O4) * (CUMcca);
-               CUMbbc = -O4 * (c1 / omega - c1o2) * Dxy * c1o3 * B + (c1 - O4) * (CUMbbc);
-               CUMbcb = -O4 * (c1 / omega - c1o2) * Dxz * c1o3 * B + (c1 - O4) * (CUMbcb);
-               CUMcbb = -O4 * (c1 / omega - c1o2) * Dyz * c1o3 * B + (c1 - O4) * (CUMcbb);
-
-               //////////////////////////////////////////////////////////////////////////
-               //5.
-               CUMbcc += O5 * (-CUMbcc);
-               CUMcbc += O5 * (-CUMcbc);
-               CUMccb += O5 * (-CUMccb);
-
-               //////////////////////////////////////////////////////////////////////////
-               //6.
-               CUMccc += O6 * (-CUMccc);
-
-			      ////////////////////////////////////////////////////////////////////////////////////
-			      //! - Compute central moments from post collision cumulants according to Eq. (53)-(56) 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>
-			      //!
-
-			      //////////////////////////////////////////////////////////////////////////
-               //4.
-               mfcbb = CUMcbb + c1o3 * ((c3 * mfcaa + c1) * mfabb + c6 * mfbba * mfbab) * OOrho;
-               mfbcb = CUMbcb + c1o3 * ((c3 * mfaca + c1) * mfbab + c6 * mfbba * mfabb) * OOrho;
-               mfbbc = CUMbbc + c1o3 * ((c3 * mfaac + c1) * mfbba + c6 * mfbab * mfabb) * OOrho;
-
-               mfcca = CUMcca + (((mfcaa * mfaca + c2 * mfbba * mfbba) * c9 + c3 * (mfcaa + mfaca)) * OOrho - (drho * OOrho)) * c1o9;
-               mfcac = CUMcac + (((mfcaa * mfaac + c2 * mfbab * mfbab) * c9 + c3 * (mfcaa + mfaac)) * OOrho - (drho * OOrho)) * c1o9;
-               mfacc = CUMacc + (((mfaac * mfaca + c2 * mfabb * mfabb) * c9 + c3 * (mfaac + mfaca)) * OOrho - (drho * OOrho)) * c1o9;
-
-               //////////////////////////////////////////////////////////////////////////
-               //5.
-               mfbcc = CUMbcc + c1o3 * (c3 * (mfaac * mfbca + mfaca * mfbac + c4 * mfabb * mfbbb + c2 * (mfbab * mfacb + mfbba * mfabc)) + (mfbca + mfbac)) * OOrho;
-               mfcbc = CUMcbc + c1o3 * (c3 * (mfaac * mfcba + mfcaa * mfabc + c4 * mfbab * mfbbb + c2 * (mfabb * mfcab + mfbba * mfbac)) + (mfcba + mfabc)) * OOrho;
-               mfccb = CUMccb + c1o3 * (c3 * (mfcaa * mfacb + mfaca * mfcab + c4 * mfbba * mfbbb + c2 * (mfbab * mfbca + mfabb * mfcba)) + (mfacb + mfcab)) * OOrho;
-
-               //////////////////////////////////////////////////////////////////////////
-               //6.
-               mfccc = CUMccc - ((-c4 * mfbbb * mfbbb
-                     - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
-                     - c4 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc)
-                     - c2 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) * OOrho
-                     + (c4 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
-                     + c2 * (mfcaa * mfaca * mfaac)
-                     + c16 * mfbba * mfbab * mfabb) * OOrho * OOrho
-                     - c1o3 * (mfacc + mfcac + mfcca) * OOrho
-                     - c1o9 * (mfcaa + mfaca + mfaac) * OOrho
-                     + (c2 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
-                     + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 * (mfaac + mfaca + mfcaa)) * OOrho * OOrho * c2o3
-                     + c1o27 * ((drho * drho - drho) * OOrho * OOrho));
-
-
-			      ////////////////////////////////////////////////////////////////////////////////////
-			      //! -  Add acceleration (body force) to first order cumulants according to Eq. (85)-(87) in
-			      //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-			      //!
-               mfbaa = -mfbaa;
-               mfaba = -mfaba;
-               mfaab = -mfaab;
-               ////////////////////////////////////////////////////////////////////////////////////
-
-			      ////////////////////////////////////////////////////////////////////////////////////
-			      //! - Chimera transform from central moments to well conditioned distributions as defined in Appendix J in
-			      //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-			      //! see also Eq. (88)-(96) in
-			      //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a>
-			      //!
-               ////////////////////////////////////////////////////////////////////////////////////
-               // X - Dir
-               backwardInverseChimeraWithK(mfaaa, mfbaa, mfcaa, vvx, vx2, c1, c1);
-               backwardChimera(mfaba, mfbba, mfcba, vvx, vx2);
-               backwardInverseChimeraWithK(mfaca, mfbca, mfcca, vvx, vx2, c3, c1o3);
-               backwardChimera(mfaab, mfbab, mfcab, vvx, vx2);
-               backwardChimera(mfabb, mfbbb, mfcbb, vvx, vx2);
-               backwardChimera(mfacb, mfbcb, mfccb, vvx, vx2);
-               backwardInverseChimeraWithK(mfaac, mfbac, mfcac, vvx, vx2, c3, c1o3);
-               backwardChimera(mfabc, mfbbc, mfcbc, vvx, vx2);
-               backwardInverseChimeraWithK(mfacc, mfbcc, mfccc, vvx, vx2, c9, c1o9);
-
-               ////////////////////////////////////////////////////////////////////////////////////
-               // Y - Dir
-               backwardInverseChimeraWithK(mfaaa, mfaba, mfaca, vvy, vy2, c6, c1o6);
-               backwardChimera(mfaab, mfabb, mfacb, vvy, vy2);
-               backwardInverseChimeraWithK(mfaac, mfabc, mfacc, vvy, vy2, c18, c1o18);
-               backwardInverseChimeraWithK(mfbaa, mfbba, mfbca, vvy, vy2, c3o2, c2o3);
-               backwardChimera(mfbab, mfbbb, mfbcb, vvy, vy2);
-               backwardInverseChimeraWithK(mfbac, mfbbc, mfbcc, vvy, vy2, c9o2, c2o9);
-               backwardInverseChimeraWithK(mfcaa, mfcba, mfcca, vvy, vy2, c6, c1o6);
-               backwardChimera(mfcab, mfcbb, mfccb, vvy, vy2);
-               backwardInverseChimeraWithK(mfcac, mfcbc, mfccc, vvy, vy2, c18, c1o18);
-
-               ////////////////////////////////////////////////////////////////////////////////////
-               // Z - Dir
-               backwardInverseChimeraWithK(mfaaa, mfaab, mfaac, vvz, vz2, c36, c1o36);
-               backwardInverseChimeraWithK(mfaba, mfabb, mfabc, vvz, vz2, c9, c1o9);
-               backwardInverseChimeraWithK(mfaca, mfacb, mfacc, vvz, vz2, c36, c1o36);
-               backwardInverseChimeraWithK(mfbaa, mfbab, mfbac, vvz, vz2, c9, c1o9);
-               backwardInverseChimeraWithK(mfbba, mfbbb, mfbbc, vvz, vz2, c9o4, c4o9);
-               backwardInverseChimeraWithK(mfbca, mfbcb, mfbcc, vvz, vz2, c9, c1o9);
-               backwardInverseChimeraWithK(mfcaa, mfcab, mfcac, vvz, vz2, c36, c1o36);
-               backwardInverseChimeraWithK(mfcba, mfcbb, mfcbc, vvz, vz2, c9, c1o9);
-               backwardInverseChimeraWithK(mfcca, mfccb, mfccc, vvz, vz2, c36, c1o36);
-               ////////////////////////////////////////////////////////////////////////////////////
-
-               //////////////////////////////////////////////////////////////////////////
-               //proof correctness
-               //////////////////////////////////////////////////////////////////////////
+                if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3))
+                {
+                    int x1p = x1 + 1;
+                    int x2p = x2 + 1;
+                    int x3p = x3 + 1;
+                    //////////////////////////////////////////////////////////////////////////
+                    //////////////////////////////////////////////////////////////////////////
+                    //! - Read distributions: 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>
+                    //!
+                    ////////////////////////////////////////////////////////////////////////////
+                    //////////////////////////////////////////////////////////////////////////
+
+                    //E   N  T
+                    //c   c  c
+                    //////////
+                    //W   S  B
+                    //a   a  a
+
+                    //Rest is b
+
+                    //mfxyz
+                    //a - negative
+                    //b - null
+                    //c - positive
+
+                    // a b c
+                    //-1 0 1
+
+                    LBMReal mfcbb = (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3);
+                    LBMReal mfbcb = (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3);
+                    LBMReal mfbbc = (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3);
+                    LBMReal mfccb = (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3);
+                    LBMReal mfacb = (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3);
+                    LBMReal mfcbc = (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3);
+                    LBMReal mfabc = (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3);
+                    LBMReal mfbcc = (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3);
+                    LBMReal mfbac = (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3);
+                    LBMReal mfccc = (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3);
+                    LBMReal mfacc = (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3);
+                    LBMReal mfcac = (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3);
+                    LBMReal mfaac = (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3);
+
+                    LBMReal mfabb = (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3);
+                    LBMReal mfbab = (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3);
+                    LBMReal mfbba = (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p);
+                    LBMReal mfaab = (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3);
+                    LBMReal mfcab = (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3);
+                    LBMReal mfaba = (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p);
+                    LBMReal mfcba = (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p);
+                    LBMReal mfbaa = (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p);
+                    LBMReal mfbca = (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p);
+                    LBMReal mfaaa = (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p);
+                    LBMReal mfcaa = (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p);
+                    LBMReal mfaca = (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p);
+                    LBMReal mfcca = (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p);
+
+                    LBMReal mfbbb = (*this->restDistributions)(x1, x2, x3);
+
+                    ////////////////////////////////////////////////////////////////////////////////////
+                    //! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. (J1)-(J3)
+                    //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
+                    //!
+                    LBMReal drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
+                                    (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
+                                    ((mfabb + mfcbb) + (mfbab + mfbcb)) + (mfbba + mfbbc)) + mfbbb;
+
+                    LBMReal rho = c1 + drho;
+                    LBMReal OOrho = c1 / rho;
+                    ////////////////////////////////////////////////////////////////////////////////////
+                    LBMReal vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
+                                   (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
+                                   (mfcbb - mfabb)) / rho;
+                    LBMReal vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
+                                   (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
+                                   (mfbcb - mfbab)) / rho;
+                    LBMReal vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
+                                   (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
+                                   (mfbbc - mfbba)) / rho;
+                    ////////////////////////////////////////////////////////////////////////////////////
+                    //forcing
+                    ///////////////////////////////////////////////////////////////////////////////////////////
+                    if (withForcing)
+                    {
+                        muX1 = static_cast<double>(x1 - 1 + ix1 * maxX1);
+                        muX2 = static_cast<double>(x2 - 1 + ix2 * maxX2);
+                        muX3 = static_cast<double>(x3 - 1 + ix3 * maxX3);
+
+                        forcingX1 = muForcingX1.Eval();
+                        forcingX2 = muForcingX2.Eval();
+                        forcingX3 = muForcingX3.Eval();
+
+                        ////////////////////////////////////////////////////////////////////////////////////
+                        //! - Add half of the acceleration (body force) to the velocity as in Eq. (42)
+                        //! <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>
+                        //!
+                        vvx += forcingX1 * deltaT * c1o2; // X
+                        vvy += forcingX2 * deltaT * c1o2; // Y
+                        vvz += forcingX3 * deltaT * c1o2; // Z
+                    }
+                    ////////////////////////////////////////////////////////////////////////////////////
+                    // calculate the square of velocities for this lattice node
+                    LBMReal vx2 = vvx * vvx;
+                    LBMReal vy2 = vvy * vvy;
+                    LBMReal vz2 = vvz * vvz;
+                    ////////////////////////////////////////////////////////////////////////////////////
+                    //! - Set relaxation limiters for third order cumulants to default value \f$ \lambda=0.001 \f$ according to section 6 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>
+                    //!
+                    LBMReal wadjust;
+                    LBMReal qudricLimitP = c1o100;
+                    LBMReal qudricLimitM = c1o100;
+                    LBMReal qudricLimitD = c1o100;
+                    ////////////////////////////////////////////////////////////////////////////////////
+                    //! - Chimera transform from well conditioned distributions to central moments as defined in Appendix J in
+                    //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
+                    //! see also Eq. (6)-(14) 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>
+                    //!
+                    ////////////////////////////////////////////////////////////////////////////////////
+                    // Z - Dir
+                    forwardInverseChimeraWithK(mfaaa, mfaab, mfaac, vvz, vz2, c36, c1o36);
+                    forwardInverseChimeraWithK(mfaba, mfabb, mfabc, vvz, vz2, c9, c1o9);
+                    forwardInverseChimeraWithK(mfaca, mfacb, mfacc, vvz, vz2, c36, c1o36);
+                    forwardInverseChimeraWithK(mfbaa, mfbab, mfbac, vvz, vz2, c9, c1o9);
+                    forwardInverseChimeraWithK(mfbba, mfbbb, mfbbc, vvz, vz2, c9o4, c4o9);
+                    forwardInverseChimeraWithK(mfbca, mfbcb, mfbcc, vvz, vz2, c9, c1o9);
+                    forwardInverseChimeraWithK(mfcaa, mfcab, mfcac, vvz, vz2, c36, c1o36);
+                    forwardInverseChimeraWithK(mfcba, mfcbb, mfcbc, vvz, vz2, c9, c1o9);
+                    forwardInverseChimeraWithK(mfcca, mfccb, mfccc, vvz, vz2, c36, c1o36);
+
+                    ////////////////////////////////////////////////////////////////////////////////////
+                    // Y - Dir
+                    forwardInverseChimeraWithK(mfaaa, mfaba, mfaca, vvy, vy2, c6, c1o6);
+                    forwardChimera(mfaab, mfabb, mfacb, vvy, vy2);
+                    forwardInverseChimeraWithK(mfaac, mfabc, mfacc, vvy, vy2, c18, c1o18);
+                    forwardInverseChimeraWithK(mfbaa, mfbba, mfbca, vvy, vy2, c3o2, c2o3);
+                    forwardChimera(mfbab, mfbbb, mfbcb, vvy, vy2);
+                    forwardInverseChimeraWithK(mfbac, mfbbc, mfbcc, vvy, vy2, c9o2, c2o9);
+                    forwardInverseChimeraWithK(mfcaa, mfcba, mfcca, vvy, vy2, c6, c1o6);
+                    forwardChimera(mfcab, mfcbb, mfccb, vvy, vy2);
+                    forwardInverseChimeraWithK(mfcac, mfcbc, mfccc, vvy, vy2, c18, c1o18);
+
+                    ////////////////////////////////////////////////////////////////////////////////////
+                    // X - Dir
+                    forwardInverseChimeraWithK(mfaaa, mfbaa, mfcaa, vvx, vx2, c1, c1);
+                    forwardChimera(mfaba, mfbba, mfcba, vvx, vx2);
+                    forwardInverseChimeraWithK(mfaca, mfbca, mfcca, vvx, vx2, c3, c1o3);
+                    forwardChimera(mfaab, mfbab, mfcab, vvx, vx2);
+                    forwardChimera(mfabb, mfbbb, mfcbb, vvx, vx2);
+                    forwardChimera(mfacb, mfbcb, mfccb, vvx, vx2);
+                    forwardInverseChimeraWithK(mfaac, mfbac, mfcac, vvx, vx2, c3, c1o3);
+                    forwardChimera(mfabc, mfbbc, mfcbc, vvx, vx2);
+                    forwardInverseChimeraWithK(mfacc, mfbcc, mfccc, vvx, vx2, c9, 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} \f$, \f$ C_{210}+C_{012} \f$, \f$ 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} \f$, \f$ C_{210}-C_{012} \f$, \f$ 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} \f$, \f$ C_{202} \f$, \f$ C_{022} \f$, \f$ C_{211} \f$, \f$ C_{121} \f$, \f$ 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}\f$, \f$C_{212}\f$, \f$C_{122}\f$: \f$\omega_9=O5=1.0\f$.
+                    //!  - Sixth order cumulant \f$ C_{222}\f$: \f$\omega_{10}=O6=1.0\f$.
+                    //!
+                    ////////////////////////////////////////////////////////////
+                    //2.
+                    LBMReal OxxPyyPzz = c1;
+                    ////////////////////////////////////////////////////////////
+                    //3.
+                    LBMReal OxyyPxzz = c8  * (-c2 + omega) * ( c1 + c2*omega) / (-c8 - c14*omega + c7*omega*omega);
+                    LBMReal OxyyMxzz = c8  * (-c2 + omega) * (-c7 + c4*omega) / (c56 - c50*omega + c9*omega*omega);
+                    LBMReal Oxyz     = c24 * (-c2 + omega) * (-c2 - c7*omega + c3*omega*omega) / (c48 + c152*omega - c130*omega*omega + c29*omega*omega*omega);
+                    ////////////////////////////////////////////////////////////
+                    //4.
+                    LBMReal O4 = c1;
+                    ////////////////////////////////////////////////////////////
+                    //5.
+                    LBMReal O5 = c1;
+                    ////////////////////////////////////////////////////////////
+                    //6.
+                    LBMReal O6 = c1;
+
+                    ////////////////////////////////////////////////////////////////////////////////////
+                    //! - A and B: parameters for fourth order convergence of the diffusion term according to Eq. (114) and (115)
+                    //! <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).
+                    //!
+                    LBMReal A = (c4 + c2*omega - c3*omega*omega) / (c2 - c7*omega + c5*omega*omega);
+                    LBMReal B = (c4 + c28*omega - c14*omega*omega) / (c6 - c21*omega + c15*omega*omega);
+
+                    ////////////////////////////////////////////////////////////////////////////////////
+                    //! - Compute cumulants from central moments according to Eq. (20)-(23) 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>
+                    //!
+                    ////////////////////////////////////////////////////////////
+                    //4.
+                    LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + c2 * mfbba * mfbab) * OOrho;
+                    LBMReal CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + c2 * mfbba * mfabb) * OOrho;
+                    LBMReal CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + c2 * mfbab * mfabb) * OOrho;
+
+                    LBMReal CUMcca = mfcca - (((mfcaa * mfaca + c2 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) * OOrho - c1o9 * (drho * OOrho));
+                    LBMReal CUMcac = mfcac - (((mfcaa * mfaac + c2 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) * OOrho - c1o9 * (drho * OOrho));
+                    LBMReal CUMacc = mfacc - (((mfaac * mfaca + c2 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) * OOrho - c1o9 * (drho * OOrho));
+                    ////////////////////////////////////////////////////////////
+                    //5.
+                    LBMReal CUMbcc = mfbcc - ((mfaac * mfbca + mfaca * mfbac + c4 * mfabb * mfbbb + c2 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)) * OOrho;
+                    LBMReal CUMcbc = mfcbc - ((mfaac * mfcba + mfcaa * mfabc + c4 * mfbab * mfbbb + c2 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)) * OOrho;
+                    LBMReal CUMccb = mfccb - ((mfcaa * mfacb + mfaca * mfcab + c4 * mfbba * mfbbb + c2 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)) * OOrho;
+                    ////////////////////////////////////////////////////////////
+                    //6.
+                    LBMReal CUMccc = mfccc + ((-c4 * mfbbb * mfbbb
+                                               - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
+                                               - c4 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc)
+                                               - c2 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) * OOrho
+                                              + (c4 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
+                                                 + c2 * (mfcaa * mfaca * mfaac)
+                                                 + c16 * mfbba * mfbab * mfabb) * OOrho * OOrho
+                                              - c1o3 * (mfacc + mfcac + mfcca) * OOrho
+                                              - c1o9 * (mfcaa + mfaca + mfaac) * OOrho
+                                              + (c2 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
+                                                 + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 * (mfaac + mfaca + mfcaa)) * OOrho * OOrho * c2o3
+                                              + c1o27 * ((drho * drho - drho) * OOrho * OOrho));
+
+                    ////////////////////////////////////////////////////////////////////////////////////
+                    //! - Compute linear combinations of second and third order cumulants
+                    //!
+                    ////////////////////////////////////////////////////////////
+                    //2.
+                    LBMReal mxxPyyPzz = mfcaa + mfaca + mfaac;
+                    LBMReal mxxMyy = mfcaa - mfaca;
+                    LBMReal mxxMzz = mfcaa - mfaac;
+                    ////////////////////////////////////////////////////////////
+                    //3.
+                    LBMReal mxxyPyzz = mfcba + mfabc;
+                    LBMReal mxxyMyzz = mfcba - mfabc;
+
+                    LBMReal mxxzPyyz = mfcab + mfacb;
+                    LBMReal mxxzMyyz = mfcab - mfacb;
+
+                    LBMReal mxyyPxzz = mfbca + mfbac;
+                    LBMReal mxyyMxzz = mfbca - mfbac;
+
+                    ////////////////////////////////////////////////////////////////////////////////////
+                    //incl. correction
+                    ////////////////////////////////////////////////////////////
+                    //! - Compute velocity  gradients from second order cumulants according to Eq. (27)-(32)
+                    //! <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>
+                    //! Further explanations of the correction in viscosity in Appendix H of
+                    //! <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>
+                    //! Note that the division by rho is omitted here as we need rho times the gradients later.
+                    //!
+                    LBMReal Dxy = -c3 * omega * mfbba;
+                    LBMReal Dxz = -c3 * omega * mfbab;
+                    LBMReal Dyz = -c3 * omega * mfabb;
+                    LBMReal dxux = c1o2 * (-omega) * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz);
+                    LBMReal dyuy = dxux + omega * c3o2 * mxxMyy;
+                    LBMReal dzuz = dxux + omega * c3o2 * mxxMzz;
+                    ////////////////////////////////////////////////////////////
+                    //! - 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 * (mfaaa - mxxPyyPzz) - c3 * (c1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);
+                    mxxMyy += omega * (-mxxMyy) - c3 * (c1 + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy);
+                    mxxMzz += omega * (-mxxMzz) - c3 * (c1 + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz);
+
+                    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+                    ////no correction
+                    //mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz);
+                    //mxxMyy += -(-omega) * (-mxxMyy);
+                    //mxxMzz += -(-omega) * (-mxxMzz);
+                    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+                    mfabb += omega * (-mfabb);
+                    mfbab += omega * (-mfbab);
+                    mfbba += omega * (-mfbba);
+
+                    ////////////////////////////////////////////////////////////////////////////////////
+                    //relax
+                    //////////////////////////////////////////////////////////////////////////
+                    // incl. limiter
+                    //! - Relaxation of third order cumulants including limiter according to Eq. (116)-(123)
+                    //! <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>
+                    //!
+                    wadjust = Oxyz + (c1 - Oxyz) * abs(mfbbb) / (abs(mfbbb) + qudricLimitD);
+                    mfbbb += wadjust * (-mfbbb);
+                    wadjust = OxyyPxzz + (c1 - OxyyPxzz) * abs(mxxyPyzz) / (abs(mxxyPyzz) + qudricLimitP);
+                    mxxyPyzz += wadjust * (-mxxyPyzz);
+                    wadjust = OxyyMxzz + (c1 - OxyyMxzz) * abs(mxxyMyzz) / (abs(mxxyMyzz) + qudricLimitM);
+                    mxxyMyzz += wadjust * (-mxxyMyzz);
+                    wadjust = OxyyPxzz + (c1 - OxyyPxzz) * abs(mxxzPyyz) / (abs(mxxzPyyz) + qudricLimitP);
+                    mxxzPyyz += wadjust * (-mxxzPyyz);
+                    wadjust = OxyyMxzz + (c1 - OxyyMxzz) * abs(mxxzMyyz) / (abs(mxxzMyyz) + qudricLimitM);
+                    mxxzMyyz += wadjust * (-mxxzMyyz);
+                    wadjust = OxyyPxzz + (c1 - OxyyPxzz) * abs(mxyyPxzz) / (abs(mxyyPxzz) + qudricLimitP);
+                    mxyyPxzz += wadjust * (-mxyyPxzz);
+                    wadjust = OxyyMxzz + (c1 - OxyyMxzz) * abs(mxyyMxzz) / (abs(mxyyMxzz) + qudricLimitM);
+                    mxyyMxzz += wadjust * (-mxyyMxzz);
+                    //////////////////////////////////////////////////////////////////////////
+                    // no limiter
+                    //mfbbb += OxyyMxzz * (-mfbbb);
+                    //mxxyPyzz += OxyyPxzz * (-mxxyPyzz);
+                    //mxxyMyzz += OxyyMxzz * (-mxxyMyzz);
+                    //mxxzPyyz += OxyyPxzz * (-mxxzPyyz);
+                    //mxxzMyyz += OxyyMxzz * (-mxxzMyyz);
+                    //mxyyPxzz += OxyyPxzz * (-mxyyPxzz);
+                    //mxyyMxzz += OxyyMxzz * (-mxyyMxzz);
+
+                    ////////////////////////////////////////////////////////////////////////////////////
+                    //! - Compute inverse linear combinations of second and third order cumulants
+                    //!
+                    mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz);
+                    mfaca = c1o3 * (-c2 * mxxMyy + mxxMzz + mxxPyyPzz);
+                    mfaac = c1o3 * (mxxMyy - c2 * mxxMzz + mxxPyyPzz);
+
+                    mfcba = (mxxyMyzz + mxxyPyzz) * c1o2;
+                    mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2;
+                    mfcab = (mxxzMyyz + mxxzPyyz) * c1o2;
+                    mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2;
+                    mfbca = (mxyyMxzz + mxyyPxzz) * c1o2;
+                    mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2;
+                    //////////////////////////////////////////////////////////////////////////
+
+                    //////////////////////////////////////////////////////////////////////////
+                    //4.
+                    // no limiter
+                    //! - Relax fourth order cumulants to modified equilibrium for fourth order convergence of diffusion according to Eq. (43)-(48)
+                    //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a>
+                    //!
+                    CUMacc = -O4 * (c1 / omega - c1o2) * (dyuy + dzuz) * c2o3 * A + (c1 - O4) * (CUMacc);
+                    CUMcac = -O4 * (c1 / omega - c1o2) * (dxux + dzuz) * c2o3 * A + (c1 - O4) * (CUMcac);
+                    CUMcca = -O4 * (c1 / omega - c1o2) * (dyuy + dxux) * c2o3 * A + (c1 - O4) * (CUMcca);
+                    CUMbbc = -O4 * (c1 / omega - c1o2) * Dxy * c1o3 * B + (c1 - O4) * (CUMbbc);
+                    CUMbcb = -O4 * (c1 / omega - c1o2) * Dxz * c1o3 * B + (c1 - O4) * (CUMbcb);
+                    CUMcbb = -O4 * (c1 / omega - c1o2) * Dyz * c1o3 * B + (c1 - O4) * (CUMcbb);
+
+                    //////////////////////////////////////////////////////////////////////////
+                    //5.
+                    CUMbcc += O5 * (-CUMbcc);
+                    CUMcbc += O5 * (-CUMcbc);
+                    CUMccb += O5 * (-CUMccb);
+
+                    //////////////////////////////////////////////////////////////////////////
+                    //6.
+                    CUMccc += O6 * (-CUMccc);
+
+                    ////////////////////////////////////////////////////////////////////////////////////
+                    //! - Compute central moments from post collision cumulants according to Eq. (53)-(56) 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>
+                    //!
+
+                    //////////////////////////////////////////////////////////////////////////
+                    //4.
+                    mfcbb = CUMcbb + c1o3 * ((c3 * mfcaa + c1) * mfabb + c6 * mfbba * mfbab) * OOrho;
+                    mfbcb = CUMbcb + c1o3 * ((c3 * mfaca + c1) * mfbab + c6 * mfbba * mfabb) * OOrho;
+                    mfbbc = CUMbbc + c1o3 * ((c3 * mfaac + c1) * mfbba + c6 * mfbab * mfabb) * OOrho;
+
+                    mfcca = CUMcca + (((mfcaa * mfaca + c2 * mfbba * mfbba) * c9 + c3 * (mfcaa + mfaca)) * OOrho - (drho * OOrho)) * c1o9;
+                    mfcac = CUMcac + (((mfcaa * mfaac + c2 * mfbab * mfbab) * c9 + c3 * (mfcaa + mfaac)) * OOrho - (drho * OOrho)) * c1o9;
+                    mfacc = CUMacc + (((mfaac * mfaca + c2 * mfabb * mfabb) * c9 + c3 * (mfaac + mfaca)) * OOrho - (drho * OOrho)) * c1o9;
+
+                    //////////////////////////////////////////////////////////////////////////
+                    //5.
+                    mfbcc = CUMbcc + c1o3 * (c3 * (mfaac * mfbca + mfaca * mfbac + c4 * mfabb * mfbbb + c2 * (mfbab * mfacb + mfbba * mfabc)) + (mfbca + mfbac)) * OOrho;
+                    mfcbc = CUMcbc + c1o3 * (c3 * (mfaac * mfcba + mfcaa * mfabc + c4 * mfbab * mfbbb + c2 * (mfabb * mfcab + mfbba * mfbac)) + (mfcba + mfabc)) * OOrho;
+                    mfccb = CUMccb + c1o3 * (c3 * (mfcaa * mfacb + mfaca * mfcab + c4 * mfbba * mfbbb + c2 * (mfbab * mfbca + mfabb * mfcba)) + (mfacb + mfcab)) * OOrho;
+
+                    //////////////////////////////////////////////////////////////////////////
+                    //6.
+                    mfccc = CUMccc - ((-c4 * mfbbb * mfbbb
+                                       - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
+                                       - c4 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc)
+                                       - c2 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) * OOrho
+                                      + (c4 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
+                                         + c2 * (mfcaa * mfaca * mfaac)
+                                         + c16 * mfbba * mfbab * mfabb) * OOrho * OOrho
+                                      - c1o3 * (mfacc + mfcac + mfcca) * OOrho
+                                      - c1o9 * (mfcaa + mfaca + mfaac) * OOrho
+                                      + (c2 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
+                                         + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 * (mfaac + mfaca + mfcaa)) * OOrho * OOrho * c2o3
+                                      + c1o27 * ((drho * drho - drho) * OOrho * OOrho));
+
+
+                    ////////////////////////////////////////////////////////////////////////////////////
+                    //! -  Add acceleration (body force) to first order cumulants according to Eq. (85)-(87) in
+                    //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
+                    //!
+                    mfbaa = -mfbaa;
+                    mfaba = -mfaba;
+                    mfaab = -mfaab;
+                    ////////////////////////////////////////////////////////////////////////////////////
+
+                    ////////////////////////////////////////////////////////////////////////////////////
+                    //! - Chimera transform from central moments to well conditioned distributions as defined in Appendix J in
+                    //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
+                    //! see also Eq. (88)-(96) in
+                    //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a>
+                    //!
+                    ////////////////////////////////////////////////////////////////////////////////////
+                    // X - Dir
+                    backwardInverseChimeraWithK(mfaaa, mfbaa, mfcaa, vvx, vx2, c1, c1);
+                    backwardChimera(mfaba, mfbba, mfcba, vvx, vx2);
+                    backwardInverseChimeraWithK(mfaca, mfbca, mfcca, vvx, vx2, c3, c1o3);
+                    backwardChimera(mfaab, mfbab, mfcab, vvx, vx2);
+                    backwardChimera(mfabb, mfbbb, mfcbb, vvx, vx2);
+                    backwardChimera(mfacb, mfbcb, mfccb, vvx, vx2);
+                    backwardInverseChimeraWithK(mfaac, mfbac, mfcac, vvx, vx2, c3, c1o3);
+                    backwardChimera(mfabc, mfbbc, mfcbc, vvx, vx2);
+                    backwardInverseChimeraWithK(mfacc, mfbcc, mfccc, vvx, vx2, c9, c1o9);
+
+                    ////////////////////////////////////////////////////////////////////////////////////
+                    // Y - Dir
+                    backwardInverseChimeraWithK(mfaaa, mfaba, mfaca, vvy, vy2, c6, c1o6);
+                    backwardChimera(mfaab, mfabb, mfacb, vvy, vy2);
+                    backwardInverseChimeraWithK(mfaac, mfabc, mfacc, vvy, vy2, c18, c1o18);
+                    backwardInverseChimeraWithK(mfbaa, mfbba, mfbca, vvy, vy2, c3o2, c2o3);
+                    backwardChimera(mfbab, mfbbb, mfbcb, vvy, vy2);
+                    backwardInverseChimeraWithK(mfbac, mfbbc, mfbcc, vvy, vy2, c9o2, c2o9);
+                    backwardInverseChimeraWithK(mfcaa, mfcba, mfcca, vvy, vy2, c6, c1o6);
+                    backwardChimera(mfcab, mfcbb, mfccb, vvy, vy2);
+                    backwardInverseChimeraWithK(mfcac, mfcbc, mfccc, vvy, vy2, c18, c1o18);
+
+                    ////////////////////////////////////////////////////////////////////////////////////
+                    // Z - Dir
+                    backwardInverseChimeraWithK(mfaaa, mfaab, mfaac, vvz, vz2, c36, c1o36);
+                    backwardInverseChimeraWithK(mfaba, mfabb, mfabc, vvz, vz2, c9, c1o9);
+                    backwardInverseChimeraWithK(mfaca, mfacb, mfacc, vvz, vz2, c36, c1o36);
+                    backwardInverseChimeraWithK(mfbaa, mfbab, mfbac, vvz, vz2, c9, c1o9);
+                    backwardInverseChimeraWithK(mfbba, mfbbb, mfbbc, vvz, vz2, c9o4, c4o9);
+                    backwardInverseChimeraWithK(mfbca, mfbcb, mfbcc, vvz, vz2, c9, c1o9);
+                    backwardInverseChimeraWithK(mfcaa, mfcab, mfcac, vvz, vz2, c36, c1o36);
+                    backwardInverseChimeraWithK(mfcba, mfcbb, mfcbc, vvz, vz2, c9, c1o9);
+                    backwardInverseChimeraWithK(mfcca, mfccb, mfccc, vvz, vz2, c36, c1o36);
+                    ////////////////////////////////////////////////////////////////////////////////////
+
+                    //////////////////////////////////////////////////////////////////////////
+                    //proof correctness
+                    //////////////////////////////////////////////////////////////////////////
 #ifdef  PROOF_CORRECTNESS
-               LBMReal drho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca)
-                  + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc)
-                  + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb;
-               LBMReal dif = drho - drho_post;
+                    LBMReal drho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca)
+                                        + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc)
+                                        + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb;
+                    LBMReal dif = drho - drho_post;
 #ifdef SINGLEPRECISION
-               if (dif > 10.0E-7 || dif < -10.0E-7)
+                    if (dif > 10.0E-7 || dif < -10.0E-7)
 #else
-               if (dif > 10.0E-15 || dif < -10.0E-15)
+                    if (dif > 10.0E-15 || dif < -10.0E-15)
 #endif
-               {
-                  UB_THROW(UbException(UB_EXARGS, "rho=" + UbSystem::toString(drho) + ", rho_post=" + UbSystem::toString(drho_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)));
-               }
+                    {
+                        UB_THROW(UbException(UB_EXARGS, "rho=" + UbSystem::toString(drho) + ", rho_post=" + UbSystem::toString(drho_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 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>
-			      //!
-               (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3) = mfabb;
-               (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3) = mfbab;
-               (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3) = mfbba;
-               (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3) = mfaab;
-               (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab;
-               (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3) = mfaba;
-               (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba;
-               (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa;
-               (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca;
-               (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa;
-               (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa;
-               (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca;
-               (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca;
-
-               (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb;
-               (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb;
-               (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc;
-               (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb;
-               (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb;
-               (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc;
-               (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc;
-               (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc;
-               (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac;
-               (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc;
-               (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc;
-               (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac;
-               (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac;
-
-               (*this->restDistributions)(x1, x2, x3) = mfbbb;
-               //////////////////////////////////////////////////////////////////////////
-
+                    ////////////////////////////////////////////////////////////////////////////////////
+                    //! - 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>
+                    //!
+                    (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3) = mfabb;
+                    (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3) = mfbab;
+                    (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3) = mfbba;
+                    (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3) = mfaab;
+                    (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab;
+                    (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3) = mfaba;
+                    (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba;
+                    (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa;
+                    (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca;
+                    (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa;
+                    (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa;
+                    (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca;
+                    (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca;
+
+                    (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb;
+                    (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb;
+                    (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc;
+                    (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb;
+                    (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb;
+                    (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc;
+                    (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc;
+                    (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc;
+                    (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac;
+                    (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc;
+                    (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc;
+                    (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac;
+                    (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac;
+
+                    (*this->restDistributions)(x1, x2, x3) = mfbbb;
+                    //////////////////////////////////////////////////////////////////////////
+
+                }
             }
-         }
-      }
-   }
+        }
+    }
 }
 //////////////////////////////////////////////////////////////////////////
 
diff --git a/src/cpu/VirtualFluidsCore/LBM/CumulantK17LBMKernel.h b/src/cpu/VirtualFluidsCore/LBM/CumulantK17LBMKernel.h
index 4444213c046873bd3dca44525f85d1be69b12fa1..10cfd49264bb829eac1fc6b9bedeee3b6eace265 100644
--- a/src/cpu/VirtualFluidsCore/LBM/CumulantK17LBMKernel.h
+++ b/src/cpu/VirtualFluidsCore/LBM/CumulantK17LBMKernel.h
@@ -1,28 +1,28 @@
 //=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __         
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |        
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |        
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |        
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____    
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|   
-//      \    \  |    |   ________________________________________________________________    
-//       \    \ |    |  |  ______________________________________________________________|   
-//        \    \|    |  |  |         __          __     __     __     ______      _______    
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)   
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______    
+// ____          ____    __    ______     __________   __      __       __        __
+// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
+//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
+//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
+//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
+//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
+//      \    \  |    |   ________________________________________________________________
+//       \    \ |    |  |  ______________________________________________________________|
+//        \    \|    |  |  |         __          __     __     __     ______      _______
+//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
+//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
 //           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/   
+//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
 //
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can 
+//  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 
+//  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 
+//
+//  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/>.
 //
@@ -41,41 +41,41 @@
 #include "basics/container/CbArray4D.h"
 #include "basics/container/CbArray3D.h"
 
-//! \brief   Compressible cumulant LBM kernel. 
+//! \brief   Compressible cumulant LBM kernel.
 //! \details  LBM implementation that use Cascaded Cumulant Lattice Boltzmann method for D3Q27 model
 //!
 //! The model is publisched in
 //! <a href="http://dx.doi.org/10.1016/j.jcp.2017.05.040"><b>[ Geier et al., (2017), 10.1016/j.jcp.2017.05.040]</b></a>,
-//! <a href="http://dx.doi.org/10.1016/j.jcp.2017.07.004"><b>[ Geier et al., (2017), 10.1016/j.jcp.2017.07.004]</b></a> 
-//! 
+//! <a href="http://dx.doi.org/10.1016/j.jcp.2017.07.004"><b>[ Geier et al., (2017), 10.1016/j.jcp.2017.07.004]</b></a>
+//!
 class CumulantK17LBMKernel : public LBMKernel
 {
 public:
-   CumulantK17LBMKernel();
-   ~CumulantK17LBMKernel() override;
-   void calculate(int step) override;
-   SPtr<LBMKernel> clone() override;
-   double getCalculationTime() override { return .0; }
+    CumulantK17LBMKernel();
+    ~CumulantK17LBMKernel() = default;
+    void calculate(int step) override;
+    SPtr<LBMKernel> clone() override;
+    double getCalculationTime() override { return .0; }
 
 protected:
-   inline void forwardInverseChimeraWithK(LBMReal& mfa, LBMReal& mfb, LBMReal& mfc, LBMReal vv, LBMReal v2, LBMReal Kinverse, LBMReal K);
-   inline void backwardInverseChimeraWithK(LBMReal& mfa, LBMReal& mfb, LBMReal& mfc, LBMReal vv, LBMReal v2, LBMReal Kinverse, LBMReal K);
-   inline void forwardChimera(LBMReal& mfa, LBMReal& mfb, LBMReal& mfc, LBMReal vv, LBMReal v2);
-   inline void backwardChimera(LBMReal& mfa, LBMReal& mfb, LBMReal& mfc, LBMReal vv, LBMReal v2);
+    inline void forwardInverseChimeraWithK(LBMReal& mfa, LBMReal& mfb, LBMReal& mfc, LBMReal vv, LBMReal v2, LBMReal Kinverse, LBMReal K);
+    inline void backwardInverseChimeraWithK(LBMReal& mfa, LBMReal& mfb, LBMReal& mfc, LBMReal vv, LBMReal v2, LBMReal Kinverse, LBMReal K);
+    inline void forwardChimera(LBMReal& mfa, LBMReal& mfb, LBMReal& mfc, LBMReal vv, LBMReal v2);
+    inline void backwardChimera(LBMReal& mfa, LBMReal& mfb, LBMReal& mfc, LBMReal vv, LBMReal v2);
 
-   virtual void initDataSet();
-   LBMReal f[D3Q27System::ENDF + 1];
+    virtual void initDataSet();
+    LBMReal f[D3Q27System::ENDF + 1];
 
-   CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr localDistributions;
-   CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributions;
-   CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr   restDistributions;
+    CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr localDistributions;
+    CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributions;
+    CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr restDistributions;
 
-   mu::value_type muX1, muX2, muX3;
-   mu::value_type muDeltaT;
-   mu::value_type muNu;
-   LBMReal forcingX1;
-   LBMReal forcingX2;
-   LBMReal forcingX3;
+    mu::value_type muX1, muX2, muX3;
+    mu::value_type muDeltaT;
+    mu::value_type muNu;
+    LBMReal forcingX1;
+    LBMReal forcingX2;
+    LBMReal forcingX3;
 };
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -86,30 +86,30 @@ protected:
 ////////////////////////////////////////////////////////////////////////////////
 inline void CumulantK17LBMKernel::forwardInverseChimeraWithK(LBMReal& mfa, LBMReal& mfb, LBMReal& mfc, LBMReal vv, LBMReal v2, LBMReal Kinverse, LBMReal K)
 {
-   using namespace UbMath;
-   LBMReal m2 = mfa + mfc;
-   LBMReal m1 = mfc - mfa;
-   LBMReal m0 = m2 + mfb;
-   mfa = m0;
-   m0 *= Kinverse;
-   m0 += c1;
-   mfb = (m1 * Kinverse - m0 * vv) * K;
-   mfc = ((m2 - c2 * m1 * vv) * Kinverse + v2 * m0) * K;
+    using namespace UbMath;
+    LBMReal m2 = mfa + mfc;
+    LBMReal m1 = mfc - mfa;
+    LBMReal m0 = m2 + mfb;
+    mfa = m0;
+    m0 *= Kinverse;
+    m0 += c1;
+    mfb = (m1 * Kinverse - m0 * vv) * K;
+    mfc = ((m2 - c2 * m1 * vv) * Kinverse + v2 * m0) * K;
 }
 ////////////////////////////////////////////////////////////////////////////////
-//! \brief backward chimera transformation \ref backwardInverseChimeraWithK 
+//! \brief backward chimera transformation \ref backwardInverseChimeraWithK
 //! Transformation from central moments to distributions according to Eq. (57)-(65) 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>
-//! Modified for lower round-off errors.
+//! ] Modified for lower round-off errors.
 ////////////////////////////////////////////////////////////////////////////////
 inline void CumulantK17LBMKernel::backwardInverseChimeraWithK(LBMReal& mfa, LBMReal& mfb, LBMReal& mfc, LBMReal vv, LBMReal v2, LBMReal Kinverse, LBMReal K)
 {
-   using namespace UbMath;
-   LBMReal m0 = (((mfc - mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + c1) * (v2 - vv) * c1o2) * K;
-   LBMReal m1 = (((mfa - mfc) - c2 * mfb * vv) * Kinverse + (mfa * Kinverse + c1) * (-v2)) * K;
-   mfc = (((mfc + mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + c1) * (v2 + vv) * c1o2) * K;
-   mfa = m0;
-   mfb = m1;
+    using namespace UbMath;
+    LBMReal m0 = (((mfc - mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + c1) * (v2 - vv) * c1o2) * K;
+    LBMReal m1 = (((mfa - mfc) - c2 * mfb * vv) * Kinverse + (mfa * Kinverse + c1) * (-v2)) * K;
+    mfc = (((mfc + mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + c1) * (v2 + vv) * c1o2) * K;
+    mfa = m0;
+    mfb = m1;
 }
 ////////////////////////////////////////////////////////////////////////////////
 //! \brief forward chimera transformation \ref forwardChimera 
@@ -120,12 +120,12 @@ inline void CumulantK17LBMKernel::backwardInverseChimeraWithK(LBMReal& mfa, LBMR
 ////////////////////////////////////////////////////////////////////////////////
 inline void CumulantK17LBMKernel::forwardChimera(LBMReal& mfa, LBMReal& mfb, LBMReal& mfc, LBMReal vv, LBMReal v2)
 {
-   using namespace UbMath;
-   LBMReal m1 = (mfa + mfc) + mfb;
-   LBMReal m2 = mfc - mfa;
-   mfc = (mfc + mfa) + (v2 * m1 - c2 * vv * m2);
-   mfb = m2 - vv * m1;
-   mfa = m1;
+    using namespace UbMath;
+    LBMReal m1 = (mfa + mfc) + mfb;
+    LBMReal m2 = mfc - mfa;
+    mfc = (mfc + mfa) + (v2 * m1 - c2 * vv * m2);
+    mfb = m2 - vv * m1;
+    mfa = m1;
 }
 ////////////////////////////////////////////////////////////////////////////////
 //! \brief backward chimera transformation \ref backwardChimera 
@@ -136,12 +136,12 @@ inline void CumulantK17LBMKernel::forwardChimera(LBMReal& mfa, LBMReal& mfb, LBM
 ////////////////////////////////////////////////////////////////////////////////
 inline void CumulantK17LBMKernel::backwardChimera(LBMReal& mfa, LBMReal& mfb, LBMReal& mfc, LBMReal vv, LBMReal v2)
 {
-   using namespace UbMath;
-   LBMReal ma = (mfc + mfa * (v2 - vv)) * c1o2 + mfb * (vv - c1o2);
-   LBMReal mb = ((mfa - mfc) - mfa * v2) - c2 * mfb * vv;
-   mfc = (mfc + mfa * (v2 + vv)) * c1o2 + mfb * (vv + c1o2);
-   mfb = mb;
-   mfa = ma;
+    using namespace UbMath;
+    LBMReal ma = (mfc + mfa * (v2 - vv)) * c1o2 + mfb * (vv - c1o2);
+    LBMReal mb = ((mfa - mfc) - mfa * v2) - c2 * mfb * vv;
+    mfc = (mfc + mfa * (v2 + vv)) * c1o2 + mfb * (vv + c1o2);
+    mfb = mb;
+    mfa = ma;
 }
 
 #endif // CumulantK17LBMKernel_h__
\ No newline at end of file
diff --git a/src/cpu/VirtualFluidsCore/LBM/D3Q27System.h b/src/cpu/VirtualFluidsCore/LBM/D3Q27System.h
index 7cd494823ca9d5335a3029609f5c3a83fd60b523..7b3e1e4ccbab55ba088bc8d6b3c4d62f56a6cc03 100644
--- a/src/cpu/VirtualFluidsCore/LBM/D3Q27System.h
+++ b/src/cpu/VirtualFluidsCore/LBM/D3Q27System.h
@@ -38,21 +38,13 @@
 #include <string>
 #include <iostream>
 
-#ifdef RCF_USE_SF_SERIALIZATION
-   #include <SF/Serializer.hpp>
-
-   #if CAB_RCF <= 903
-      #include <SF/SerializeEnum.hpp>   
-   #endif
-#endif //RCF_USE_SF_SERIALIZATION
-
 #include <basics/utilities/UbException.h>
 #include <basics/utilities/UbTuple.h>
 #include <basics/utilities/UbMath.h>
 #include <basics/utilities/UbSystem.h>
 //#include "Patch3DSystem.h"
 #include "LBMSystem.h"
-	
+
 /*=========================================================================*/
 /*  D3Q27System                                                            */
 /*                                                                         */
@@ -61,1052 +53,1052 @@ class for global system-functions
 <BR><BR>
 @author <A HREF="mailto:kucher@irmb.tu-bs.de">K. Kucher</A>
 @version 1.0 - 22.10.09
-*/ 
+*/
 
 /*
 usage: ...
 */
 
-   namespace D3Q27System
-   {
-      //enum COLLISIONMODEL { UNDEFINED, INCOMPLBGKMODEL,   COMPLBGKMODEL,   COMPLBGKWTMODEL,   INCOMPLBGKLESMODEL, INCOMPLBGKNONNEWTONIANMODEL    
-      //                               , INCOMPGLBEJTMODEL, COMPGLBEJTMODEL, COMPGLBEJTWTMODEL, INCOMPGLBEJTLESMODEL, INCOMPGLBEJTWALEMODEL  
-      //                               , CASCADEDMODEL};
-      //
-      // #if defined(RCF_USE_SF_SERIALIZATION) && (CAB_RCF <= 903)
-      //    SF_SERIALIZE_ENUM(COLLISIONMODEL) //muss im namespace stehen, sonst funzt es nicht!
-      // #endif
+namespace D3Q27System
+{
+  //enum COLLISIONMODEL { UNDEFINED, INCOMPLBGKMODEL,   COMPLBGKMODEL,   COMPLBGKWTMODEL,   INCOMPLBGKLESMODEL, INCOMPLBGKNONNEWTONIANMODEL
+  //                               , INCOMPGLBEJTMODEL, COMPGLBEJTMODEL, COMPGLBEJTWTMODEL, INCOMPGLBEJTLESMODEL, INCOMPGLBEJTWALEMODEL
+  //                               , CASCADEDMODEL};
+  //
+  // #if defined(RCF_USE_SF_SERIALIZATION) && (CAB_RCF <= 903)
+  //    SF_SERIALIZE_ENUM(COLLISIONMODEL) //muss im namespace stehen, sonst funzt es nicht!
+  // #endif
 
-      ///*=====================================================================*/
-      //std::string toString(const COLLISIONMODEL& model);
-      ///*=====================================================================*/
-      //COLLISIONMODEL getCollModelByString(const std::string& str);
-      ///*=====================================================================*/
+  ///*=====================================================================*/
+  //std::string toString(const COLLISIONMODEL& model);
+  ///*=====================================================================*/
+  //COLLISIONMODEL getCollModelByString(const std::string& str);
+  ///*=====================================================================*/
 
-      ///*=====================================================================*/
-      //static bool isCompModel(const COLLISIONMODEL& model) 
-      //{
-      //   switch(model)
-      //   {
-      //   case COMPLBGKMODEL               : return true; 
-      //   case COMPLBGKWTMODEL             : return true; 
-      //   case COMPGLBEJTWTMODEL           : return true;
-      //   case COMPGLBEJTMODEL             : return true;
-      //   case CASCADEDMODEL               : return true;
-      //   
-      //   case INCOMPLBGKMODEL             : return false;
-      //   case INCOMPGLBEJTMODEL           : return false;
-      //   case INCOMPLBGKLESMODEL          : return false;
-      //   case INCOMPGLBEJTLESMODEL        : return false;
-      //   case INCOMPGLBEJTWALEMODEL       : return false;
-      //   case INCOMPLBGKNONNEWTONIANMODEL : return false;
+  ///*=====================================================================*/
+  //static bool isCompModel(const COLLISIONMODEL& model)
+  //{
+  //   switch(model)
+  //   {
+  //   case COMPLBGKMODEL               : return true;
+  //   case COMPLBGKWTMODEL             : return true;
+  //   case COMPGLBEJTWTMODEL           : return true;
+  //   case COMPGLBEJTMODEL             : return true;
+  //   case CASCADEDMODEL               : return true;
+  //
+  //   case INCOMPLBGKMODEL             : return false;
+  //   case INCOMPGLBEJTMODEL           : return false;
+  //   case INCOMPLBGKLESMODEL          : return false;
+  //   case INCOMPGLBEJTLESMODEL        : return false;
+  //   case INCOMPGLBEJTWALEMODEL       : return false;
+  //   case INCOMPLBGKNONNEWTONIANMODEL : return false;
 
-      //   default: throw UbException(UB_EXARGS,"unknown model");
-      //   }
-      //}
-      ///*=====================================================================*/
-      //static bool isGLBEModel(const COLLISIONMODEL& model) 
-      //{
-      //   switch(model)
-      //   {
-      //   case COMPGLBEJTWTMODEL           : return true;
-      //   case COMPGLBEJTMODEL             : return true;
-      //   case INCOMPGLBEJTMODEL           : return true;
-      //   case INCOMPGLBEJTLESMODEL        : return true;
-      //   case INCOMPGLBEJTWALEMODEL       : return false;
+  //   default: throw UbException(UB_EXARGS,"unknown model");
+  //   }
+  //}
+  ///*=====================================================================*/
+  //static bool isGLBEModel(const COLLISIONMODEL& model)
+  //{
+  //   switch(model)
+  //   {
+  //   case COMPGLBEJTWTMODEL           : return true;
+  //   case COMPGLBEJTMODEL             : return true;
+  //   case INCOMPGLBEJTMODEL           : return true;
+  //   case INCOMPGLBEJTLESMODEL        : return true;
+  //   case INCOMPGLBEJTWALEMODEL       : return false;
 
-      //   case COMPLBGKMODEL               : return false; 
-      //   case COMPLBGKWTMODEL             : return false; 
-      //   case INCOMPLBGKMODEL             : return false;
-      //   case INCOMPLBGKLESMODEL          : return false;
-      //   case INCOMPLBGKNONNEWTONIANMODEL : return false;
+  //   case COMPLBGKMODEL               : return false;
+  //   case COMPLBGKWTMODEL             : return false;
+  //   case INCOMPLBGKMODEL             : return false;
+  //   case INCOMPLBGKLESMODEL          : return false;
+  //   case INCOMPLBGKNONNEWTONIANMODEL : return false;
 
-      //   default: throw UbException(UB_EXARGS,"unknown model");
-      //   }
-      //}
-      //static bool isLESModel(const COLLISIONMODEL& model) 
-      //{
-      //   switch(model)
-      //   {
-      //   case INCOMPGLBEJTLESMODEL        : return true;
-      //   case INCOMPLBGKLESMODEL          : return true;
-      //   case INCOMPGLBEJTWALEMODEL       : return true;
-      //   
-      //   case COMPGLBEJTWTMODEL           : return false;
-      //   case COMPGLBEJTMODEL             : return false;
-      //   case INCOMPGLBEJTMODEL           : return false;
-      //   case COMPLBGKMODEL               : return false; 
-      //   case COMPLBGKWTMODEL             : return false; 
-      //   case INCOMPLBGKMODEL             : return false;
-      //   case INCOMPLBGKNONNEWTONIANMODEL : return false;
+  //   default: throw UbException(UB_EXARGS,"unknown model");
+  //   }
+  //}
+  //static bool isLESModel(const COLLISIONMODEL& model)
+  //{
+  //   switch(model)
+  //   {
+  //   case INCOMPGLBEJTLESMODEL        : return true;
+  //   case INCOMPLBGKLESMODEL          : return true;
+  //   case INCOMPGLBEJTWALEMODEL       : return true;
+  //
+  //   case COMPGLBEJTWTMODEL           : return false;
+  //   case COMPGLBEJTMODEL             : return false;
+  //   case INCOMPGLBEJTMODEL           : return false;
+  //   case COMPLBGKMODEL               : return false;
+  //   case COMPLBGKWTMODEL             : return false;
+  //   case INCOMPLBGKMODEL             : return false;
+  //   case INCOMPLBGKNONNEWTONIANMODEL : return false;
 
-      //   default: throw UbException(UB_EXARGS,"unknown model");
-      //   }
-      //}
+  //   default: throw UbException(UB_EXARGS,"unknown model");
+  //   }
+  //}
 
-      //////////////////////////////////////////////////////////////////////////
-      //////////////////////////////////////////////////////////////////////////
-      //DIRECTION STUFF
-      static const int FSTARTDIR = 0;
-      static const int FENDDIR = 25;   //D3Q27
+  //////////////////////////////////////////////////////////////////////////
+  //////////////////////////////////////////////////////////////////////////
+  //DIRECTION STUFF
+  static const int FSTARTDIR = 0;
+  static const int FENDDIR = 25;   //D3Q27
 
-      //static const int FSTARTDIR = 1;
-      //static const int FENDDIR   = 26;   //D3Q27
+  //static const int FSTARTDIR = 1;
+  //static const int FENDDIR   = 26;   //D3Q27
 
-      static const int STARTF = 0;
-      static const int ENDF = 26;   //D3Q27
+  static const int STARTF = 0;
+  static const int ENDF = 26;   //D3Q27
 
-      //extern const int EX1[ENDF+1];
-      //extern const int EX2[ENDF+1];
-      //extern const int EX3[ENDF+1];
+  //extern const int EX1[ENDF+1];
+  //extern const int EX2[ENDF+1];
+  //extern const int EX3[ENDF+1];
 
-      static const int STARTDIR = 0;
-      static const int ENDDIR = 26; //alle geometrischen richtungen
+  static const int STARTDIR = 0;
+  static const int ENDDIR = 26; //alle geometrischen richtungen
 
-      extern const int DX1[ENDDIR + 1];
-      extern const int DX2[ENDDIR + 1];
-      extern const int DX3[ENDDIR + 1];
-      extern const double WEIGTH[ENDDIR + 1];
+  extern const int DX1[ENDDIR + 1];
+  extern const int DX2[ENDDIR + 1];
+  extern const int DX3[ENDDIR + 1];
+  extern const double WEIGTH[ENDDIR + 1];
 
-      //static const int ZERO /*f0 */ = 0;
-      //static const int E    /*f1 */ = 1;
-      //static const int W    /*f2 */ = 2;
-      //static const int N    /*f3 */ = 3;
-      //static const int S    /*f4 */ = 4;
-      //static const int T    /*f5 */ = 5;
-      //static const int B    /*f6 */ = 6;
-      //static const int NE   /*f7 */ = 7;
-      //static const int SW   /*f8 */ = 8;
-      //static const int SE   /*f9 */ = 9;
-      //static const int NW   /*f10*/ = 10;
-      //static const int TE   /*f11*/ = 11;
-      //static const int BW   /*f12*/ = 12;
-      //static const int BE   /*f13*/ = 13;
-      //static const int TW   /*f14*/ = 14;
-      //static const int TN   /*f15*/ = 15;
-      //static const int BS   /*f16*/ = 16;
-      //static const int BN   /*f17*/ = 17;
-      //static const int TS   /*f18*/ = 18;
-      //static const int TNE          = 19;
-      //static const int TNW          = 20;
-      //static const int TSE          = 21;
-      //static const int TSW          = 22;
-      //static const int BNE          = 23;
-      //static const int BNW          = 24;
-      //static const int BSE          = 25;
-      //static const int BSW          = 26;
+  //static const int ZERO /*f0 */ = 0;
+  //static const int E    /*f1 */ = 1;
+  //static const int W    /*f2 */ = 2;
+  //static const int N    /*f3 */ = 3;
+  //static const int S    /*f4 */ = 4;
+  //static const int T    /*f5 */ = 5;
+  //static const int B    /*f6 */ = 6;
+  //static const int NE   /*f7 */ = 7;
+  //static const int SW   /*f8 */ = 8;
+  //static const int SE   /*f9 */ = 9;
+  //static const int NW   /*f10*/ = 10;
+  //static const int TE   /*f11*/ = 11;
+  //static const int BW   /*f12*/ = 12;
+  //static const int BE   /*f13*/ = 13;
+  //static const int TW   /*f14*/ = 14;
+  //static const int TN   /*f15*/ = 15;
+  //static const int BS   /*f16*/ = 16;
+  //static const int BN   /*f17*/ = 17;
+  //static const int TS   /*f18*/ = 18;
+  //static const int TNE          = 19;
+  //static const int TNW          = 20;
+  //static const int TSE          = 21;
+  //static const int TSW          = 22;
+  //static const int BNE          = 23;
+  //static const int BNW          = 24;
+  //static const int BSE          = 25;
+  //static const int BSW          = 26;
 
-      static const int E    /*f1 */ = 0;
-      static const int W    /*f2 */ = 1;
-      static const int N    /*f3 */ = 2;
-      static const int S    /*f4 */ = 3;
-      static const int T    /*f5 */ = 4;
-      static const int B    /*f6 */ = 5;
-      static const int NE   /*f7 */ = 6;
-      static const int SW   /*f8 */ = 7;
-      static const int SE   /*f9 */ = 8;
-      static const int NW   /*f10*/ = 9;
-      static const int TE   /*f11*/ = 10;
-      static const int BW   /*f12*/ = 11;
-      static const int BE   /*f13*/ = 12;
-      static const int TW   /*f14*/ = 13;
-      static const int TN   /*f15*/ = 14;
-      static const int BS   /*f16*/ = 15;
-      static const int BN   /*f17*/ = 16;
-      static const int TS   /*f18*/ = 17;
-      static const int TNE = 18;
-      static const int TNW = 19;
-      static const int TSE = 20;
-      static const int TSW = 21;
-      static const int BNE = 22;
-      static const int BNW = 23;
-      static const int BSE = 24;
-      static const int BSW = 25;
-      static const int ZERO /*f0 */ = 26;
+  static const int E    /*f1 */ = 0;
+  static const int W    /*f2 */ = 1;
+  static const int N    /*f3 */ = 2;
+  static const int S    /*f4 */ = 3;
+  static const int T    /*f5 */ = 4;
+  static const int B    /*f6 */ = 5;
+  static const int NE   /*f7 */ = 6;
+  static const int SW   /*f8 */ = 7;
+  static const int SE   /*f9 */ = 8;
+  static const int NW   /*f10*/ = 9;
+  static const int TE   /*f11*/ = 10;
+  static const int BW   /*f12*/ = 11;
+  static const int BE   /*f13*/ = 12;
+  static const int TW   /*f14*/ = 13;
+  static const int TN   /*f15*/ = 14;
+  static const int BS   /*f16*/ = 15;
+  static const int BN   /*f17*/ = 16;
+  static const int TS   /*f18*/ = 17;
+  static const int TNE = 18;
+  static const int TNW = 19;
+  static const int TSE = 20;
+  static const int TSW = 21;
+  static const int BNE = 22;
+  static const int BNW = 23;
+  static const int BSE = 24;
+  static const int BSW = 25;
+  static const int ZERO /*f0 */ = 26;
 
-      static const int INV_E = W;
-      static const int INV_W = E;
-      static const int INV_N = S;
-      static const int INV_S = N;
-      static const int INV_T = B;
-      static const int INV_B = T;
-      static const int INV_NE = SW;
-      static const int INV_SW = NE;
-      static const int INV_SE = NW;
-      static const int INV_NW = SE;
-      static const int INV_TE = BW;
-      static const int INV_BW = TE;
-      static const int INV_BE = TW;
-      static const int INV_TW = BE;
-      static const int INV_TN = BS;
-      static const int INV_BS = TN;
-      static const int INV_BN = TS;
-      static const int INV_TS = BN;
-      static const int INV_TNE = BSW;
-      static const int INV_TNW = BSE;
-      static const int INV_TSE = BNW;
-      static const int INV_TSW = BNE;
-      static const int INV_BNE = TSW;
-      static const int INV_BNW = TSE;
-      static const int INV_BSE = TNW;
-      static const int INV_BSW = TNE;
+  static const int INV_E = W;
+  static const int INV_W = E;
+  static const int INV_N = S;
+  static const int INV_S = N;
+  static const int INV_T = B;
+  static const int INV_B = T;
+  static const int INV_NE = SW;
+  static const int INV_SW = NE;
+  static const int INV_SE = NW;
+  static const int INV_NW = SE;
+  static const int INV_TE = BW;
+  static const int INV_BW = TE;
+  static const int INV_BE = TW;
+  static const int INV_TW = BE;
+  static const int INV_TN = BS;
+  static const int INV_BS = TN;
+  static const int INV_BN = TS;
+  static const int INV_TS = BN;
+  static const int INV_TNE = BSW;
+  static const int INV_TNW = BSE;
+  static const int INV_TSE = BNW;
+  static const int INV_TSW = BNE;
+  static const int INV_BNE = TSW;
+  static const int INV_BNW = TSE;
+  static const int INV_BSE = TNW;
+  static const int INV_BSW = TNE;
 
-      extern const int INVDIR[ENDDIR + 1];
+  extern const int INVDIR[ENDDIR + 1];
 
-      static const int ET_E = 0;
-      static const int ET_W = 0;
-      static const int ET_N = 1;
-      static const int ET_S = 1;
-      static const int ET_T = 2;
-      static const int ET_B = 2;
-      static const int ET_NE = 3;
-      static const int ET_SW = 3;
-      static const int ET_SE = 4;
-      static const int ET_NW = 4;
-      static const int ET_TE = 5;
-      static const int ET_BW = 5;
-      static const int ET_BE = 6;
-      static const int ET_TW = 6;
-      static const int ET_TN = 7;
-      static const int ET_BS = 7;
-      static const int ET_BN = 8;
-      static const int ET_TS = 8;
-      static const int ET_TNE = 9;
-      static const int ET_BSW = 9;
-      static const int ET_TNW = 10;
-      static const int ET_BSE = 10;
-      static const int ET_TSE = 11;
-      static const int ET_BNW = 11;
-      static const int ET_TSW = 12;
-      static const int ET_BNE = 12;
+  static const int ET_E = 0;
+  static const int ET_W = 0;
+  static const int ET_N = 1;
+  static const int ET_S = 1;
+  static const int ET_T = 2;
+  static const int ET_B = 2;
+  static const int ET_NE = 3;
+  static const int ET_SW = 3;
+  static const int ET_SE = 4;
+  static const int ET_NW = 4;
+  static const int ET_TE = 5;
+  static const int ET_BW = 5;
+  static const int ET_BE = 6;
+  static const int ET_TW = 6;
+  static const int ET_TN = 7;
+  static const int ET_BS = 7;
+  static const int ET_BN = 8;
+  static const int ET_TS = 8;
+  static const int ET_TNE = 9;
+  static const int ET_BSW = 9;
+  static const int ET_TNW = 10;
+  static const int ET_BSE = 10;
+  static const int ET_TSE = 11;
+  static const int ET_BNW = 11;
+  static const int ET_TSW = 12;
+  static const int ET_BNE = 12;
 
 
-      //////////////////////////////////////////////////////////////////////////
-      //MACROSCOPIC VALUES                  
-      /*=====================================================================*/
-      static LBMReal getDensity(const LBMReal* const& f/*[27]*/)
-      {
-         return  ((f[TNE] + f[BSW]) + (f[TSE] + f[BNW])) + ((f[BSE] + f[TNW]) + (f[TSW] + f[BNE]))
-            + (((f[NE] + f[SW]) + (f[SE] + f[NW])) + ((f[TE] + f[BW]) + (f[BE] + f[TW]))
-               + ((f[BN] + f[TS]) + (f[TN] + f[BS]))) + ((f[E] + f[W]) + (f[N] + f[S])
-                  + (f[T] + f[B])) + f[ZERO];
-      }
-      /*=====================================================================*/
-      //ACHTUNG: gilt nicht fuer alle modelle -> praedikat verwenden anstelle static! toDo
-      static LBMReal getPressure(const LBMReal* const& f/*[27]*/)
-      {
-         return  REAL_CAST(UbMath::c1o3) * getDensity(f);
-      }
-      /*=====================================================================*/
-      static LBMReal getIncompVelocityX1(const LBMReal* const& f/*[27]*/)
-      {
-         return ((((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[E] - f[W]));
-      }
-      /*=====================================================================*/
-      static LBMReal getIncompVelocityX2(const LBMReal* const& f/*[27]*/)
-      {
-         return ((((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]))) +
-            (f[N] - f[S]));
-      }
-      /*=====================================================================*/
-      static LBMReal getIncompVelocityX3(const LBMReal* const& f/*[27]*/)
-      {
-         return ((((f[TNE] - f[BSW]) + (f[TSE] - f[BNW])) + ((f[TNW] - f[BSE]) + (f[TSW] - f[BNE]))) +
-            (((f[TS] - f[BN]) + (f[TN] - f[BS])) + ((f[TW] - f[BE]) + (f[TE] - f[BW]))) +
-            (f[T] - f[B]));
-      }
-      /*=====================================================================*/
-      static void calcDensity(const LBMReal* const& f/*[27]*/, LBMReal& rho)
-      {
-         rho = ((f[TNE] + f[BSW]) + (f[TSE] + f[BNW])) + ((f[BSE] + f[TNW]) + (f[TSW] + f[BNE]))
-            + (((f[NE] + f[SW]) + (f[SE] + f[NW])) + ((f[TE] + f[BW]) + (f[BE] + f[TW]))
-               + ((f[BN] + f[TS]) + (f[TN] + f[BS]))) + ((f[E] + f[W]) + (f[N] + f[S])
-                  + (f[T] + f[B])) + f[ZERO];
+  //////////////////////////////////////////////////////////////////////////
+  //MACROSCOPIC VALUES
+  /*=====================================================================*/
+  static LBMReal getDensity(const LBMReal* const& f/*[27]*/)
+  {
+     return  ((f[TNE] + f[BSW]) + (f[TSE] + f[BNW])) + ((f[BSE] + f[TNW]) + (f[TSW] + f[BNE]))
+        + (((f[NE] + f[SW]) + (f[SE] + f[NW])) + ((f[TE] + f[BW]) + (f[BE] + f[TW]))
+           + ((f[BN] + f[TS]) + (f[TN] + f[BS]))) + ((f[E] + f[W]) + (f[N] + f[S])
+              + (f[T] + f[B])) + f[ZERO];
+  }
+  /*=====================================================================*/
+  //ACHTUNG: gilt nicht fuer alle modelle -> praedikat verwenden anstelle static! toDo
+  static LBMReal getPressure(const LBMReal* const& f/*[27]*/)
+  {
+     return  REAL_CAST(UbMath::c1o3) * getDensity(f);
+  }
+  /*=====================================================================*/
+  static LBMReal getIncompVelocityX1(const LBMReal* const& f/*[27]*/)
+  {
+     return ((((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[E] - f[W]));
+  }
+  /*=====================================================================*/
+  static LBMReal getIncompVelocityX2(const LBMReal* const& f/*[27]*/)
+  {
+     return ((((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]))) +
+        (f[N] - f[S]));
+  }
+  /*=====================================================================*/
+  static LBMReal getIncompVelocityX3(const LBMReal* const& f/*[27]*/)
+  {
+     return ((((f[TNE] - f[BSW]) + (f[TSE] - f[BNW])) + ((f[TNW] - f[BSE]) + (f[TSW] - f[BNE]))) +
+        (((f[TS] - f[BN]) + (f[TN] - f[BS])) + ((f[TW] - f[BE]) + (f[TE] - f[BW]))) +
+        (f[T] - f[B]));
+  }
+  /*=====================================================================*/
+  static void calcDensity(const LBMReal* const& f/*[27]*/, LBMReal& rho)
+  {
+     rho = ((f[TNE] + f[BSW]) + (f[TSE] + f[BNW])) + ((f[BSE] + f[TNW]) + (f[TSW] + f[BNE]))
+        + (((f[NE] + f[SW]) + (f[SE] + f[NW])) + ((f[TE] + f[BW]) + (f[BE] + f[TW]))
+           + ((f[BN] + f[TS]) + (f[TN] + f[BS]))) + ((f[E] + f[W]) + (f[N] + f[S])
+              + (f[T] + f[B])) + f[ZERO];
 
-      }
-      /*=====================================================================*/
-      static void calcIncompVelocityX1(const LBMReal* const& f/*[27]*/, LBMReal& vx1)
-      {
-         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[E] - f[W]));
-      }
-      /*=====================================================================*/
-      static void calcIncompVelocityX2(const LBMReal* const& f/*[27]*/, LBMReal& vx2)
-      {
-         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]))) +
-            (f[N] - f[S]));
-      }
-      /*=====================================================================*/
-      static void calcIncompVelocityX3(const LBMReal* const& f/*[27]*/, LBMReal& vx3)
-      {
-         vx3 = ((((f[TNE] - f[BSW]) + (f[TSE] - f[BNW])) + ((f[TNW] - f[BSE]) + (f[TSW] - f[BNE]))) +
-            (((f[TS] - f[BN]) + (f[TN] - f[BS])) + ((f[TW] - f[BE]) + (f[TE] - f[BW]))) +
-            (f[T] - f[B]));
-      }
-      /*=====================================================================*/
-      static LBMReal getCompVelocityX1(const LBMReal* const& f/*[27]*/)
-      {
-         return ((((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[E] - f[W])) / getDensity(f);
-      }
-      /*=====================================================================*/
-      static LBMReal getCompVelocityX2(const LBMReal* const& f/*[27]*/)
-      {
-         return ((((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]))) +
-            (f[N] - f[S])) / getDensity(f);
-      }
-      /*=====================================================================*/
-      static LBMReal getCompVelocityX3(const LBMReal* const& f/*[27]*/)
-      {
-         return ((((f[TNE] - f[BSW]) + (f[TSE] - f[BNW])) + ((f[TNW] - f[BSE]) + (f[TSW] - f[BNE]))) +
-            (((f[TS] - f[BN]) + (f[TN] - f[BS])) + ((f[TW] - f[BE]) + (f[TE] - f[BW]))) +
-            (f[T] - f[B])) / getDensity(f);
-      }
-      /*=====================================================================*/
-      static void calcCompVelocityX1(const LBMReal* const& f/*[27]*/, LBMReal& vx1)
-      {
-         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[E] - f[W])) / getDensity(f);
-      }
-      /*=====================================================================*/
-      static void calcCompVelocityX2(const LBMReal* const& f/*[27]*/, LBMReal& vx2)
-      {
-         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]))) +
-            (f[N] - f[S])) / getDensity(f);
-      }
-      /*=====================================================================*/
-      static void calcCompVelocityX3(const LBMReal* const& f/*[27]*/, LBMReal& vx3)
-      {
-         vx3 = ((((f[TNE] - f[BSW]) + (f[TSE] - f[BNW])) + ((f[TNW] - f[BSE]) + (f[TSW] - f[BNE]))) +
-            (((f[TS] - f[BN]) + (f[TN] - f[BS])) + ((f[TW] - f[BE]) + (f[TE] - f[BW]))) +
-            (f[T] - f[B])) / getDensity(f);
-      }
-      /*=====================================================================*/
-      static void calcIncompMacroscopicValues(const LBMReal* const& f/*[27]*/, LBMReal& rho, LBMReal& vx1, LBMReal& vx2, LBMReal& vx3)
-      {
-         D3Q27System::calcDensity(f, rho);
-         D3Q27System::calcIncompVelocityX1(f, vx1);
-         D3Q27System::calcIncompVelocityX2(f, vx2);
-         D3Q27System::calcIncompVelocityX3(f, vx3);
-      }
+  }
+  /*=====================================================================*/
+  static void calcIncompVelocityX1(const LBMReal* const& f/*[27]*/, LBMReal& vx1)
+  {
+     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[E] - f[W]));
+  }
+  /*=====================================================================*/
+  static void calcIncompVelocityX2(const LBMReal* const& f/*[27]*/, LBMReal& vx2)
+  {
+     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]))) +
+        (f[N] - f[S]));
+  }
+  /*=====================================================================*/
+  static void calcIncompVelocityX3(const LBMReal* const& f/*[27]*/, LBMReal& vx3)
+  {
+     vx3 = ((((f[TNE] - f[BSW]) + (f[TSE] - f[BNW])) + ((f[TNW] - f[BSE]) + (f[TSW] - f[BNE]))) +
+        (((f[TS] - f[BN]) + (f[TN] - f[BS])) + ((f[TW] - f[BE]) + (f[TE] - f[BW]))) +
+        (f[T] - f[B]));
+  }
+  /*=====================================================================*/
+  static LBMReal getCompVelocityX1(const LBMReal* const& f/*[27]*/)
+  {
+     return ((((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[E] - f[W])) / getDensity(f);
+  }
+  /*=====================================================================*/
+  static LBMReal getCompVelocityX2(const LBMReal* const& f/*[27]*/)
+  {
+     return ((((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]))) +
+        (f[N] - f[S])) / getDensity(f);
+  }
+  /*=====================================================================*/
+  static LBMReal getCompVelocityX3(const LBMReal* const& f/*[27]*/)
+  {
+     return ((((f[TNE] - f[BSW]) + (f[TSE] - f[BNW])) + ((f[TNW] - f[BSE]) + (f[TSW] - f[BNE]))) +
+        (((f[TS] - f[BN]) + (f[TN] - f[BS])) + ((f[TW] - f[BE]) + (f[TE] - f[BW]))) +
+        (f[T] - f[B])) / getDensity(f);
+  }
+  /*=====================================================================*/
+  static void calcCompVelocityX1(const LBMReal* const& f/*[27]*/, LBMReal& vx1)
+  {
+     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[E] - f[W])) / getDensity(f);
+  }
+  /*=====================================================================*/
+  static void calcCompVelocityX2(const LBMReal* const& f/*[27]*/, LBMReal& vx2)
+  {
+     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]))) +
+        (f[N] - f[S])) / getDensity(f);
+  }
+  /*=====================================================================*/
+  static void calcCompVelocityX3(const LBMReal* const& f/*[27]*/, LBMReal& vx3)
+  {
+     vx3 = ((((f[TNE] - f[BSW]) + (f[TSE] - f[BNW])) + ((f[TNW] - f[BSE]) + (f[TSW] - f[BNE]))) +
+        (((f[TS] - f[BN]) + (f[TN] - f[BS])) + ((f[TW] - f[BE]) + (f[TE] - f[BW]))) +
+        (f[T] - f[B])) / getDensity(f);
+  }
+  /*=====================================================================*/
+  static void calcIncompMacroscopicValues(const LBMReal* const& f/*[27]*/, LBMReal& rho, LBMReal& vx1, LBMReal& vx2, LBMReal& vx3)
+  {
+     D3Q27System::calcDensity(f, rho);
+     D3Q27System::calcIncompVelocityX1(f, vx1);
+     D3Q27System::calcIncompVelocityX2(f, vx2);
+     D3Q27System::calcIncompVelocityX3(f, vx3);
+  }
 
-      /*=====================================================================*/
-      static void calcCompMacroscopicValues(const LBMReal* const& f/*[27]*/, LBMReal& drho, LBMReal& vx1, LBMReal& vx2, LBMReal& vx3)
-      {
-         D3Q27System::calcDensity(f, drho);
-         D3Q27System::calcIncompVelocityX1(f, vx1);
-         D3Q27System::calcIncompVelocityX2(f, vx2);
-         D3Q27System::calcIncompVelocityX3(f, vx3);
-         LBMReal rho = drho + UbMath::one;
-         vx1 /= rho;
-         vx2 /= rho;
-         vx3 /= rho;
-      }
-      //////////////////////////////////////////////////////////////////////////
-      static LBMReal getCompFeqForDirection(const int& direction, const LBMReal& drho, const LBMReal& vx1, const LBMReal& vx2, const LBMReal& vx3)
-      {
-         LBMReal cu_sq = 1.5 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3);
+  /*=====================================================================*/
+  static void calcCompMacroscopicValues(const LBMReal* const& f/*[27]*/, LBMReal& drho, LBMReal& vx1, LBMReal& vx2, LBMReal& vx3)
+  {
+     D3Q27System::calcDensity(f, drho);
+     D3Q27System::calcIncompVelocityX1(f, vx1);
+     D3Q27System::calcIncompVelocityX2(f, vx2);
+     D3Q27System::calcIncompVelocityX3(f, vx3);
+     LBMReal rho = drho + UbMath::one;
+     vx1 /= rho;
+     vx2 /= rho;
+     vx3 /= rho;
+  }
+  //////////////////////////////////////////////////////////////////////////
+  static LBMReal getCompFeqForDirection(const int& direction, const LBMReal& drho, const LBMReal& vx1, const LBMReal& vx2, const LBMReal& vx3)
+  {
+     LBMReal cu_sq = 1.5 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3);
 
-         //switch(direction)    
-         //{
-         //   case ZERO : return REAL_CAST( UbMath::c8o27*rho*(1.0-cu_sq));
-         //   case E : return REAL_CAST(  UbMath::c2o27*rho*(1.0+3.0*( vx1   )+UbMath::c9o2*( vx1   )*( vx1   )-cu_sq));
-         //   case W : return REAL_CAST(  UbMath::c2o27*rho*(1.0+3.0*(-vx1   )+UbMath::c9o2*(-vx1   )*(-vx1   )-cu_sq));
-         //   case N : return REAL_CAST(  UbMath::c2o27*rho*(1.0+3.0*(    vx2)+UbMath::c9o2*(    vx2)*(    vx2)-cu_sq));
-         //   case S : return REAL_CAST(  UbMath::c2o27*rho*(1.0+3.0*(   -vx2)+UbMath::c9o2*(   -vx2)*(   -vx2)-cu_sq));
-         //   case T : return REAL_CAST(  UbMath::c2o27*rho*(1.0+3.0*( vx3   )+UbMath::c9o2*(    vx3)*(    vx3)-cu_sq));
-         //   case B : return REAL_CAST(  UbMath::c2o27*rho*(1.0+3.0*(   -vx3)+UbMath::c9o2*(   -vx3)*(   -vx3)-cu_sq));
-         //   case NE : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*( vx1+vx2)+UbMath::c9o2*( vx1+vx2)*( vx1+vx2)-cu_sq));
-         //   case SW : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*(-vx1-vx2)+UbMath::c9o2*(-vx1-vx2)*(-vx1-vx2)-cu_sq));
-         //   case SE : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*( vx1-vx2)+UbMath::c9o2*( vx1-vx2)*( vx1-vx2)-cu_sq));
-         //   case NW : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*(-vx1+vx2)+UbMath::c9o2*(-vx1+vx2)*(-vx1+vx2)-cu_sq));
-         //   case TE : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*( vx1+vx3)+UbMath::c9o2*( vx1+vx3)*( vx1+vx3)-cu_sq));
-         //   case BW : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*(-vx1-vx3)+UbMath::c9o2*(-vx1-vx3)*(-vx1-vx3)-cu_sq));
-         //   case BE : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*( vx1-vx3)+UbMath::c9o2*( vx1-vx3)*( vx1-vx3)-cu_sq));
-         //   case TW : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*(-vx1+vx3)+UbMath::c9o2*(-vx1+vx3)*(-vx1+vx3)-cu_sq));
-         //   case TN : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*( vx2+vx3)+UbMath::c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq));
-         //   case BS : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*(-vx2-vx3)+UbMath::c9o2*(-vx2-vx3)*(-vx2-vx3)-cu_sq));
-         //   case BN : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*( vx2-vx3)+UbMath::c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq));
-         //   case TS : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*(-vx2+vx3)+UbMath::c9o2*(-vx2+vx3)*(-vx2+vx3)-cu_sq));
-         //   case TNE : return REAL_CAST(UbMath::c1o216*rho*(1.0+3.0*( vx1+vx2+vx3)+UbMath::c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
-         //   case BSW : return REAL_CAST(UbMath::c1o216*rho*(1.0+3.0*(-vx1-vx2-vx3)+UbMath::c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
-         //   case BNE : return REAL_CAST(UbMath::c1o216*rho*(1.0+3.0*( vx1+vx2-vx3)+UbMath::c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
-         //   case TSW : return REAL_CAST(UbMath::c1o216*rho*(1.0+3.0*(-vx1-vx2+vx3)+UbMath::c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
-         //   case TSE : return REAL_CAST(UbMath::c1o216*rho*(1.0+3.0*( vx1-vx2+vx3)+UbMath::c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
-         //   case BNW : return REAL_CAST(UbMath::c1o216*rho*(1.0+3.0*(-vx1+vx2-vx3)+UbMath::c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
-         //   case BSE : return REAL_CAST(UbMath::c1o216*rho*(1.0+3.0*( vx1-vx2-vx3)+UbMath::c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
-         //   case TNW : return REAL_CAST(UbMath::c1o216*rho*(1.0+3.0*(-vx1+vx2+vx3)+UbMath::c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
-         //   default: throw UbException(UB_EXARGS,"unknown dir");
-         //}
+     //switch(direction)
+     //{
+     //   case ZERO : return REAL_CAST( UbMath::c8o27*rho*(1.0-cu_sq));
+     //   case E : return REAL_CAST(  UbMath::c2o27*rho*(1.0+3.0*( vx1   )+UbMath::c9o2*( vx1   )*( vx1   )-cu_sq));
+     //   case W : return REAL_CAST(  UbMath::c2o27*rho*(1.0+3.0*(-vx1   )+UbMath::c9o2*(-vx1   )*(-vx1   )-cu_sq));
+     //   case N : return REAL_CAST(  UbMath::c2o27*rho*(1.0+3.0*(    vx2)+UbMath::c9o2*(    vx2)*(    vx2)-cu_sq));
+     //   case S : return REAL_CAST(  UbMath::c2o27*rho*(1.0+3.0*(   -vx2)+UbMath::c9o2*(   -vx2)*(   -vx2)-cu_sq));
+     //   case T : return REAL_CAST(  UbMath::c2o27*rho*(1.0+3.0*( vx3   )+UbMath::c9o2*(    vx3)*(    vx3)-cu_sq));
+     //   case B : return REAL_CAST(  UbMath::c2o27*rho*(1.0+3.0*(   -vx3)+UbMath::c9o2*(   -vx3)*(   -vx3)-cu_sq));
+     //   case NE : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*( vx1+vx2)+UbMath::c9o2*( vx1+vx2)*( vx1+vx2)-cu_sq));
+     //   case SW : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*(-vx1-vx2)+UbMath::c9o2*(-vx1-vx2)*(-vx1-vx2)-cu_sq));
+     //   case SE : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*( vx1-vx2)+UbMath::c9o2*( vx1-vx2)*( vx1-vx2)-cu_sq));
+     //   case NW : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*(-vx1+vx2)+UbMath::c9o2*(-vx1+vx2)*(-vx1+vx2)-cu_sq));
+     //   case TE : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*( vx1+vx3)+UbMath::c9o2*( vx1+vx3)*( vx1+vx3)-cu_sq));
+     //   case BW : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*(-vx1-vx3)+UbMath::c9o2*(-vx1-vx3)*(-vx1-vx3)-cu_sq));
+     //   case BE : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*( vx1-vx3)+UbMath::c9o2*( vx1-vx3)*( vx1-vx3)-cu_sq));
+     //   case TW : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*(-vx1+vx3)+UbMath::c9o2*(-vx1+vx3)*(-vx1+vx3)-cu_sq));
+     //   case TN : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*( vx2+vx3)+UbMath::c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq));
+     //   case BS : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*(-vx2-vx3)+UbMath::c9o2*(-vx2-vx3)*(-vx2-vx3)-cu_sq));
+     //   case BN : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*( vx2-vx3)+UbMath::c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq));
+     //   case TS : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*(-vx2+vx3)+UbMath::c9o2*(-vx2+vx3)*(-vx2+vx3)-cu_sq));
+     //   case TNE : return REAL_CAST(UbMath::c1o216*rho*(1.0+3.0*( vx1+vx2+vx3)+UbMath::c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
+     //   case BSW : return REAL_CAST(UbMath::c1o216*rho*(1.0+3.0*(-vx1-vx2-vx3)+UbMath::c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
+     //   case BNE : return REAL_CAST(UbMath::c1o216*rho*(1.0+3.0*( vx1+vx2-vx3)+UbMath::c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
+     //   case TSW : return REAL_CAST(UbMath::c1o216*rho*(1.0+3.0*(-vx1-vx2+vx3)+UbMath::c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
+     //   case TSE : return REAL_CAST(UbMath::c1o216*rho*(1.0+3.0*( vx1-vx2+vx3)+UbMath::c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
+     //   case BNW : return REAL_CAST(UbMath::c1o216*rho*(1.0+3.0*(-vx1+vx2-vx3)+UbMath::c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
+     //   case BSE : return REAL_CAST(UbMath::c1o216*rho*(1.0+3.0*( vx1-vx2-vx3)+UbMath::c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
+     //   case TNW : return REAL_CAST(UbMath::c1o216*rho*(1.0+3.0*(-vx1+vx2+vx3)+UbMath::c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
+     //   default: throw UbException(UB_EXARGS,"unknown dir");
+     //}
 
 
-         ////-----
-         LBMReal rho = drho + UbMath::one;
-         switch (direction)
-         {
-         case ZERO: return REAL_CAST(UbMath::c8o27 * (drho + rho * (-cu_sq)));
-         case E: return REAL_CAST(UbMath::c2o27 * (drho + rho * (3.0 * (vx1)+UbMath::c9o2 * (vx1) * (vx1)-cu_sq)));
-         case W: return REAL_CAST(UbMath::c2o27 * (drho + rho * (3.0 * (-vx1) + UbMath::c9o2 * (-vx1) * (-vx1) - cu_sq)));
-         case N: return REAL_CAST(UbMath::c2o27 * (drho + rho * (3.0 * (vx2)+UbMath::c9o2 * (vx2) * (vx2)-cu_sq)));
-         case S: return REAL_CAST(UbMath::c2o27 * (drho + rho * (3.0 * (-vx2) + UbMath::c9o2 * (-vx2) * (-vx2) - cu_sq)));
-         case T: return REAL_CAST(UbMath::c2o27 * (drho + rho * (3.0 * (vx3)+UbMath::c9o2 * (vx3) * (vx3)-cu_sq)));
-         case B: return REAL_CAST(UbMath::c2o27 * (drho + rho * (3.0 * (-vx3) + UbMath::c9o2 * (-vx3) * (-vx3) - cu_sq)));
-         case NE: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (vx1 + vx2) + UbMath::c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq)));
-         case SW: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (-vx1 - vx2) + UbMath::c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq)));
-         case SE: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (vx1 - vx2) + UbMath::c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq)));
-         case NW: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (-vx1 + vx2) + UbMath::c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq)));
-         case TE: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (vx1 + vx3) + UbMath::c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq)));
-         case BW: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (-vx1 - vx3) + UbMath::c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq)));
-         case BE: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (vx1 - vx3) + UbMath::c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq)));
-         case TW: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (-vx1 + vx3) + UbMath::c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq)));
-         case TN: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (vx2 + vx3) + UbMath::c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq)));
-         case BS: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (-vx2 - vx3) + UbMath::c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq)));
-         case BN: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (vx2 - vx3) + UbMath::c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq)));
-         case TS: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (-vx2 + vx3) + UbMath::c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq)));
-         case TNE: return REAL_CAST(UbMath::c1o216 * (drho + rho * (3.0 * (vx1 + vx2 + vx3) + UbMath::c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq)));
-         case BSW: return REAL_CAST(UbMath::c1o216 * (drho + rho * (3.0 * (-vx1 - vx2 - vx3) + UbMath::c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq)));
-         case BNE: return REAL_CAST(UbMath::c1o216 * (drho + rho * (3.0 * (vx1 + vx2 - vx3) + UbMath::c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq)));
-         case TSW: return REAL_CAST(UbMath::c1o216 * (drho + rho * (3.0 * (-vx1 - vx2 + vx3) + UbMath::c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq)));
-         case TSE: return REAL_CAST(UbMath::c1o216 * (drho + rho * (3.0 * (vx1 - vx2 + vx3) + UbMath::c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq)));
-         case BNW: return REAL_CAST(UbMath::c1o216 * (drho + rho * (3.0 * (-vx1 + vx2 - vx3) + UbMath::c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq)));
-         case BSE: return REAL_CAST(UbMath::c1o216 * (drho + rho * (3.0 * (vx1 - vx2 - vx3) + UbMath::c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq)));
-         case TNW: return REAL_CAST(UbMath::c1o216 * (drho + rho * (3.0 * (-vx1 + vx2 + vx3) + UbMath::c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq)));
-         default: throw UbException(UB_EXARGS, "unknown dir");
-         }
+     ////-----
+     LBMReal rho = drho + UbMath::one;
+     switch (direction)
+     {
+     case ZERO: return REAL_CAST(UbMath::c8o27 * (drho + rho * (-cu_sq)));
+     case E: return REAL_CAST(UbMath::c2o27 * (drho + rho * (3.0 * (vx1)+UbMath::c9o2 * (vx1) * (vx1)-cu_sq)));
+     case W: return REAL_CAST(UbMath::c2o27 * (drho + rho * (3.0 * (-vx1) + UbMath::c9o2 * (-vx1) * (-vx1) - cu_sq)));
+     case N: return REAL_CAST(UbMath::c2o27 * (drho + rho * (3.0 * (vx2)+UbMath::c9o2 * (vx2) * (vx2)-cu_sq)));
+     case S: return REAL_CAST(UbMath::c2o27 * (drho + rho * (3.0 * (-vx2) + UbMath::c9o2 * (-vx2) * (-vx2) - cu_sq)));
+     case T: return REAL_CAST(UbMath::c2o27 * (drho + rho * (3.0 * (vx3)+UbMath::c9o2 * (vx3) * (vx3)-cu_sq)));
+     case B: return REAL_CAST(UbMath::c2o27 * (drho + rho * (3.0 * (-vx3) + UbMath::c9o2 * (-vx3) * (-vx3) - cu_sq)));
+     case NE: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (vx1 + vx2) + UbMath::c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq)));
+     case SW: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (-vx1 - vx2) + UbMath::c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq)));
+     case SE: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (vx1 - vx2) + UbMath::c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq)));
+     case NW: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (-vx1 + vx2) + UbMath::c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq)));
+     case TE: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (vx1 + vx3) + UbMath::c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq)));
+     case BW: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (-vx1 - vx3) + UbMath::c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq)));
+     case BE: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (vx1 - vx3) + UbMath::c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq)));
+     case TW: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (-vx1 + vx3) + UbMath::c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq)));
+     case TN: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (vx2 + vx3) + UbMath::c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq)));
+     case BS: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (-vx2 - vx3) + UbMath::c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq)));
+     case BN: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (vx2 - vx3) + UbMath::c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq)));
+     case TS: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (-vx2 + vx3) + UbMath::c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq)));
+     case TNE: return REAL_CAST(UbMath::c1o216 * (drho + rho * (3.0 * (vx1 + vx2 + vx3) + UbMath::c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq)));
+     case BSW: return REAL_CAST(UbMath::c1o216 * (drho + rho * (3.0 * (-vx1 - vx2 - vx3) + UbMath::c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq)));
+     case BNE: return REAL_CAST(UbMath::c1o216 * (drho + rho * (3.0 * (vx1 + vx2 - vx3) + UbMath::c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq)));
+     case TSW: return REAL_CAST(UbMath::c1o216 * (drho + rho * (3.0 * (-vx1 - vx2 + vx3) + UbMath::c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq)));
+     case TSE: return REAL_CAST(UbMath::c1o216 * (drho + rho * (3.0 * (vx1 - vx2 + vx3) + UbMath::c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq)));
+     case BNW: return REAL_CAST(UbMath::c1o216 * (drho + rho * (3.0 * (-vx1 + vx2 - vx3) + UbMath::c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq)));
+     case BSE: return REAL_CAST(UbMath::c1o216 * (drho + rho * (3.0 * (vx1 - vx2 - vx3) + UbMath::c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq)));
+     case TNW: return REAL_CAST(UbMath::c1o216 * (drho + rho * (3.0 * (-vx1 + vx2 + vx3) + UbMath::c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq)));
+     default: throw UbException(UB_EXARGS, "unknown dir");
+     }
 
-      }
-      //////////////////////////////////////////////////////////////////////////
-      static void calcCompFeq(LBMReal* const& feq/*[27]*/, const LBMReal& drho, const LBMReal& vx1, const LBMReal& vx2, const LBMReal& vx3)
-      {
-         //LBMReal cu_sq=1.5*(vx1*vx1+vx2*vx2+vx3*vx3);
+  }
+  //////////////////////////////////////////////////////////////////////////
+  static void calcCompFeq(LBMReal* const& feq/*[27]*/, const LBMReal& drho, const LBMReal& vx1, const LBMReal& vx2, const LBMReal& vx3)
+  {
+     //LBMReal cu_sq=1.5*(vx1*vx1+vx2*vx2+vx3*vx3);
 
-         //feq[ZERO] =  UbMath::c8o27*rho*(1.0-cu_sq);
-         //feq[E] =   UbMath::c2o27*rho*(1.0+3.0*( vx1   )+UbMath::c9o2*( vx1   )*( vx1   )-cu_sq);
-         //feq[W] =   UbMath::c2o27*rho*(1.0+3.0*(-vx1   )+UbMath::c9o2*(-vx1   )*(-vx1   )-cu_sq);
-         //feq[N] =   UbMath::c2o27*rho*(1.0+3.0*(    vx2)+UbMath::c9o2*(    vx2)*(    vx2)-cu_sq);
-         //feq[S] =   UbMath::c2o27*rho*(1.0+3.0*(   -vx2)+UbMath::c9o2*(   -vx2)*(   -vx2)-cu_sq);
-         //feq[T] =   UbMath::c2o27*rho*(1.0+3.0*( vx3   )+UbMath::c9o2*(    vx3)*(    vx3)-cu_sq);
-         //feq[B] =   UbMath::c2o27*rho*(1.0+3.0*(   -vx3)+UbMath::c9o2*(   -vx3)*(   -vx3)-cu_sq);
-         //feq[NE] =  UbMath::c1o54*rho*(1.0+3.0*( vx1+vx2)+UbMath::c9o2*( vx1+vx2)*( vx1+vx2)-cu_sq);
-         //feq[SW] =  UbMath::c1o54*rho*(1.0+3.0*(-vx1-vx2)+UbMath::c9o2*(-vx1-vx2)*(-vx1-vx2)-cu_sq);
-         //feq[SE] =  UbMath::c1o54*rho*(1.0+3.0*( vx1-vx2)+UbMath::c9o2*( vx1-vx2)*( vx1-vx2)-cu_sq);
-         //feq[NW] =  UbMath::c1o54*rho*(1.0+3.0*(-vx1+vx2)+UbMath::c9o2*(-vx1+vx2)*(-vx1+vx2)-cu_sq);
-         //feq[TE] =  UbMath::c1o54*rho*(1.0+3.0*( vx1+vx3)+UbMath::c9o2*( vx1+vx3)*( vx1+vx3)-cu_sq);
-         //feq[BW] =  UbMath::c1o54*rho*(1.0+3.0*(-vx1-vx3)+UbMath::c9o2*(-vx1-vx3)*(-vx1-vx3)-cu_sq);
-         //feq[BE] =  UbMath::c1o54*rho*(1.0+3.0*( vx1-vx3)+UbMath::c9o2*( vx1-vx3)*( vx1-vx3)-cu_sq);
-         //feq[TW] =  UbMath::c1o54*rho*(1.0+3.0*(-vx1+vx3)+UbMath::c9o2*(-vx1+vx3)*(-vx1+vx3)-cu_sq);
-         //feq[TN] =  UbMath::c1o54*rho*(1.0+3.0*( vx2+vx3)+UbMath::c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq);
-         //feq[BS] =  UbMath::c1o54*rho*(1.0+3.0*(-vx2-vx3)+UbMath::c9o2*(-vx2-vx3)*(-vx2-vx3)-cu_sq);
-         //feq[BN] =  UbMath::c1o54*rho*(1.0+3.0*( vx2-vx3)+UbMath::c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq);
-         //feq[TS] =  UbMath::c1o54*rho*(1.0+3.0*(-vx2+vx3)+UbMath::c9o2*(-vx2+vx3)*(-vx2+vx3)-cu_sq);
-         //feq[TNE] = UbMath::c1o216*rho*(1.0+3.0*( vx1+vx2+vx3)+UbMath::c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
-         //feq[BSW] = UbMath::c1o216*rho*(1.0+3.0*(-vx1-vx2-vx3)+UbMath::c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
-         //feq[BNE] = UbMath::c1o216*rho*(1.0+3.0*( vx1+vx2-vx3)+UbMath::c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
-         //feq[TSW] = UbMath::c1o216*rho*(1.0+3.0*(-vx1-vx2+vx3)+UbMath::c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
-         //feq[TSE] = UbMath::c1o216*rho*(1.0+3.0*( vx1-vx2+vx3)+UbMath::c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
-         //feq[BNW] = UbMath::c1o216*rho*(1.0+3.0*(-vx1+vx2-vx3)+UbMath::c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
-         //feq[BSE] = UbMath::c1o216*rho*(1.0+3.0*( vx1-vx2-vx3)+UbMath::c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
-         //feq[TNW] = UbMath::c1o216*rho*(1.0+3.0*(-vx1+vx2+vx3)+UbMath::c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
+     //feq[ZERO] =  UbMath::c8o27*rho*(1.0-cu_sq);
+     //feq[E] =   UbMath::c2o27*rho*(1.0+3.0*( vx1   )+UbMath::c9o2*( vx1   )*( vx1   )-cu_sq);
+     //feq[W] =   UbMath::c2o27*rho*(1.0+3.0*(-vx1   )+UbMath::c9o2*(-vx1   )*(-vx1   )-cu_sq);
+     //feq[N] =   UbMath::c2o27*rho*(1.0+3.0*(    vx2)+UbMath::c9o2*(    vx2)*(    vx2)-cu_sq);
+     //feq[S] =   UbMath::c2o27*rho*(1.0+3.0*(   -vx2)+UbMath::c9o2*(   -vx2)*(   -vx2)-cu_sq);
+     //feq[T] =   UbMath::c2o27*rho*(1.0+3.0*( vx3   )+UbMath::c9o2*(    vx3)*(    vx3)-cu_sq);
+     //feq[B] =   UbMath::c2o27*rho*(1.0+3.0*(   -vx3)+UbMath::c9o2*(   -vx3)*(   -vx3)-cu_sq);
+     //feq[NE] =  UbMath::c1o54*rho*(1.0+3.0*( vx1+vx2)+UbMath::c9o2*( vx1+vx2)*( vx1+vx2)-cu_sq);
+     //feq[SW] =  UbMath::c1o54*rho*(1.0+3.0*(-vx1-vx2)+UbMath::c9o2*(-vx1-vx2)*(-vx1-vx2)-cu_sq);
+     //feq[SE] =  UbMath::c1o54*rho*(1.0+3.0*( vx1-vx2)+UbMath::c9o2*( vx1-vx2)*( vx1-vx2)-cu_sq);
+     //feq[NW] =  UbMath::c1o54*rho*(1.0+3.0*(-vx1+vx2)+UbMath::c9o2*(-vx1+vx2)*(-vx1+vx2)-cu_sq);
+     //feq[TE] =  UbMath::c1o54*rho*(1.0+3.0*( vx1+vx3)+UbMath::c9o2*( vx1+vx3)*( vx1+vx3)-cu_sq);
+     //feq[BW] =  UbMath::c1o54*rho*(1.0+3.0*(-vx1-vx3)+UbMath::c9o2*(-vx1-vx3)*(-vx1-vx3)-cu_sq);
+     //feq[BE] =  UbMath::c1o54*rho*(1.0+3.0*( vx1-vx3)+UbMath::c9o2*( vx1-vx3)*( vx1-vx3)-cu_sq);
+     //feq[TW] =  UbMath::c1o54*rho*(1.0+3.0*(-vx1+vx3)+UbMath::c9o2*(-vx1+vx3)*(-vx1+vx3)-cu_sq);
+     //feq[TN] =  UbMath::c1o54*rho*(1.0+3.0*( vx2+vx3)+UbMath::c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq);
+     //feq[BS] =  UbMath::c1o54*rho*(1.0+3.0*(-vx2-vx3)+UbMath::c9o2*(-vx2-vx3)*(-vx2-vx3)-cu_sq);
+     //feq[BN] =  UbMath::c1o54*rho*(1.0+3.0*( vx2-vx3)+UbMath::c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq);
+     //feq[TS] =  UbMath::c1o54*rho*(1.0+3.0*(-vx2+vx3)+UbMath::c9o2*(-vx2+vx3)*(-vx2+vx3)-cu_sq);
+     //feq[TNE] = UbMath::c1o216*rho*(1.0+3.0*( vx1+vx2+vx3)+UbMath::c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
+     //feq[BSW] = UbMath::c1o216*rho*(1.0+3.0*(-vx1-vx2-vx3)+UbMath::c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
+     //feq[BNE] = UbMath::c1o216*rho*(1.0+3.0*( vx1+vx2-vx3)+UbMath::c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
+     //feq[TSW] = UbMath::c1o216*rho*(1.0+3.0*(-vx1-vx2+vx3)+UbMath::c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
+     //feq[TSE] = UbMath::c1o216*rho*(1.0+3.0*( vx1-vx2+vx3)+UbMath::c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
+     //feq[BNW] = UbMath::c1o216*rho*(1.0+3.0*(-vx1+vx2-vx3)+UbMath::c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
+     //feq[BSE] = UbMath::c1o216*rho*(1.0+3.0*( vx1-vx2-vx3)+UbMath::c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
+     //feq[TNW] = UbMath::c1o216*rho*(1.0+3.0*(-vx1+vx2+vx3)+UbMath::c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
 
-         //////////////////////////////////////////////////////////////////////////
+     //////////////////////////////////////////////////////////////////////////
 
-         LBMReal cu_sq = 1.5 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3);
-         LBMReal rho = drho + UbMath::one;
+     LBMReal cu_sq = 1.5 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3);
+     LBMReal rho = drho + UbMath::one;
 
-         feq[ZERO] = UbMath::c8o27 * (drho + rho * (-cu_sq));
-         feq[E] = UbMath::c2o27 * (drho + rho * (3.0 * (vx1)+UbMath::c9o2 * (vx1) * (vx1)-cu_sq));
-         feq[W] = UbMath::c2o27 * (drho + rho * (3.0 * (-vx1) + UbMath::c9o2 * (-vx1) * (-vx1) - cu_sq));
-         feq[N] = UbMath::c2o27 * (drho + rho * (3.0 * (vx2)+UbMath::c9o2 * (vx2) * (vx2)-cu_sq));
-         feq[S] = UbMath::c2o27 * (drho + rho * (3.0 * (-vx2) + UbMath::c9o2 * (-vx2) * (-vx2) - cu_sq));
-         feq[T] = UbMath::c2o27 * (drho + rho * (3.0 * (vx3)+UbMath::c9o2 * (vx3) * (vx3)-cu_sq));
-         feq[B] = UbMath::c2o27 * (drho + rho * (3.0 * (-vx3) + UbMath::c9o2 * (-vx3) * (-vx3) - cu_sq));
-         feq[NE] = UbMath::c1o54 * (drho + rho * (3.0 * (vx1 + vx2) + UbMath::c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq));
-         feq[SW] = UbMath::c1o54 * (drho + rho * (3.0 * (-vx1 - vx2) + UbMath::c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq));
-         feq[SE] = UbMath::c1o54 * (drho + rho * (3.0 * (vx1 - vx2) + UbMath::c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq));
-         feq[NW] = UbMath::c1o54 * (drho + rho * (3.0 * (-vx1 + vx2) + UbMath::c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq));
-         feq[TE] = UbMath::c1o54 * (drho + rho * (3.0 * (vx1 + vx3) + UbMath::c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq));
-         feq[BW] = UbMath::c1o54 * (drho + rho * (3.0 * (-vx1 - vx3) + UbMath::c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq));
-         feq[BE] = UbMath::c1o54 * (drho + rho * (3.0 * (vx1 - vx3) + UbMath::c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq));
-         feq[TW] = UbMath::c1o54 * (drho + rho * (3.0 * (-vx1 + vx3) + UbMath::c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq));
-         feq[TN] = UbMath::c1o54 * (drho + rho * (3.0 * (vx2 + vx3) + UbMath::c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq));
-         feq[BS] = UbMath::c1o54 * (drho + rho * (3.0 * (-vx2 - vx3) + UbMath::c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq));
-         feq[BN] = UbMath::c1o54 * (drho + rho * (3.0 * (vx2 - vx3) + UbMath::c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq));
-         feq[TS] = UbMath::c1o54 * (drho + rho * (3.0 * (-vx2 + vx3) + UbMath::c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq));
-         feq[TNE] = UbMath::c1o216 * (drho + rho * (3.0 * (vx1 + vx2 + vx3) + UbMath::c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq));
-         feq[BSW] = UbMath::c1o216 * (drho + rho * (3.0 * (-vx1 - vx2 - vx3) + UbMath::c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq));
-         feq[BNE] = UbMath::c1o216 * (drho + rho * (3.0 * (vx1 + vx2 - vx3) + UbMath::c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq));
-         feq[TSW] = UbMath::c1o216 * (drho + rho * (3.0 * (-vx1 - vx2 + vx3) + UbMath::c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq));
-         feq[TSE] = UbMath::c1o216 * (drho + rho * (3.0 * (vx1 - vx2 + vx3) + UbMath::c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq));
-         feq[BNW] = UbMath::c1o216 * (drho + rho * (3.0 * (-vx1 + vx2 - vx3) + UbMath::c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq));
-         feq[BSE] = UbMath::c1o216 * (drho + rho * (3.0 * (vx1 - vx2 - vx3) + UbMath::c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq));
-         feq[TNW] = UbMath::c1o216 * (drho + rho * (3.0 * (-vx1 + vx2 + vx3) + UbMath::c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq));
-      }
-      //////////////////////////////////////////////////////////////////////////
-      static LBMReal getIncompFeqForDirection(const int& direction, const LBMReal& drho, const LBMReal& vx1, const LBMReal& vx2, const LBMReal& vx3)
-      {
-         LBMReal cu_sq = 1.5f * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3);
+     feq[ZERO] = UbMath::c8o27 * (drho + rho * (-cu_sq));
+     feq[E] = UbMath::c2o27 * (drho + rho * (3.0 * (vx1)+UbMath::c9o2 * (vx1) * (vx1)-cu_sq));
+     feq[W] = UbMath::c2o27 * (drho + rho * (3.0 * (-vx1) + UbMath::c9o2 * (-vx1) * (-vx1) - cu_sq));
+     feq[N] = UbMath::c2o27 * (drho + rho * (3.0 * (vx2)+UbMath::c9o2 * (vx2) * (vx2)-cu_sq));
+     feq[S] = UbMath::c2o27 * (drho + rho * (3.0 * (-vx2) + UbMath::c9o2 * (-vx2) * (-vx2) - cu_sq));
+     feq[T] = UbMath::c2o27 * (drho + rho * (3.0 * (vx3)+UbMath::c9o2 * (vx3) * (vx3)-cu_sq));
+     feq[B] = UbMath::c2o27 * (drho + rho * (3.0 * (-vx3) + UbMath::c9o2 * (-vx3) * (-vx3) - cu_sq));
+     feq[NE] = UbMath::c1o54 * (drho + rho * (3.0 * (vx1 + vx2) + UbMath::c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq));
+     feq[SW] = UbMath::c1o54 * (drho + rho * (3.0 * (-vx1 - vx2) + UbMath::c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq));
+     feq[SE] = UbMath::c1o54 * (drho + rho * (3.0 * (vx1 - vx2) + UbMath::c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq));
+     feq[NW] = UbMath::c1o54 * (drho + rho * (3.0 * (-vx1 + vx2) + UbMath::c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq));
+     feq[TE] = UbMath::c1o54 * (drho + rho * (3.0 * (vx1 + vx3) + UbMath::c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq));
+     feq[BW] = UbMath::c1o54 * (drho + rho * (3.0 * (-vx1 - vx3) + UbMath::c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq));
+     feq[BE] = UbMath::c1o54 * (drho + rho * (3.0 * (vx1 - vx3) + UbMath::c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq));
+     feq[TW] = UbMath::c1o54 * (drho + rho * (3.0 * (-vx1 + vx3) + UbMath::c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq));
+     feq[TN] = UbMath::c1o54 * (drho + rho * (3.0 * (vx2 + vx3) + UbMath::c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq));
+     feq[BS] = UbMath::c1o54 * (drho + rho * (3.0 * (-vx2 - vx3) + UbMath::c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq));
+     feq[BN] = UbMath::c1o54 * (drho + rho * (3.0 * (vx2 - vx3) + UbMath::c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq));
+     feq[TS] = UbMath::c1o54 * (drho + rho * (3.0 * (-vx2 + vx3) + UbMath::c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq));
+     feq[TNE] = UbMath::c1o216 * (drho + rho * (3.0 * (vx1 + vx2 + vx3) + UbMath::c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq));
+     feq[BSW] = UbMath::c1o216 * (drho + rho * (3.0 * (-vx1 - vx2 - vx3) + UbMath::c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq));
+     feq[BNE] = UbMath::c1o216 * (drho + rho * (3.0 * (vx1 + vx2 - vx3) + UbMath::c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq));
+     feq[TSW] = UbMath::c1o216 * (drho + rho * (3.0 * (-vx1 - vx2 + vx3) + UbMath::c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq));
+     feq[TSE] = UbMath::c1o216 * (drho + rho * (3.0 * (vx1 - vx2 + vx3) + UbMath::c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq));
+     feq[BNW] = UbMath::c1o216 * (drho + rho * (3.0 * (-vx1 + vx2 - vx3) + UbMath::c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq));
+     feq[BSE] = UbMath::c1o216 * (drho + rho * (3.0 * (vx1 - vx2 - vx3) + UbMath::c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq));
+     feq[TNW] = UbMath::c1o216 * (drho + rho * (3.0 * (-vx1 + vx2 + vx3) + UbMath::c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq));
+  }
+  //////////////////////////////////////////////////////////////////////////
+  static LBMReal getIncompFeqForDirection(const int& direction, const LBMReal& drho, const LBMReal& vx1, const LBMReal& vx2, const LBMReal& vx3)
+  {
+     LBMReal cu_sq = 1.5f * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3);
 
-         switch (direction)
-         {
-         case ZERO: return REAL_CAST(UbMath::c8o27 * (drho - cu_sq));
-         case E: return REAL_CAST(UbMath::c2o27 * (drho + 3.0 * (vx1)+UbMath::c9o2 * (vx1) * (vx1)-cu_sq));
-         case W: return REAL_CAST(UbMath::c2o27 * (drho + 3.0 * (-vx1) + UbMath::c9o2 * (-vx1) * (-vx1) - cu_sq));
-         case N: return REAL_CAST(UbMath::c2o27 * (drho + 3.0 * (vx2)+UbMath::c9o2 * (vx2) * (vx2)-cu_sq));
-         case S: return REAL_CAST(UbMath::c2o27 * (drho + 3.0 * (-vx2) + UbMath::c9o2 * (-vx2) * (-vx2) - cu_sq));
-         case T: return REAL_CAST(UbMath::c2o27 * (drho + 3.0 * (vx3)+UbMath::c9o2 * (vx3) * (vx3)-cu_sq));
-         case B: return REAL_CAST(UbMath::c2o27 * (drho + 3.0 * (-vx3) + UbMath::c9o2 * (-vx3) * (-vx3) - cu_sq));
-         case NE: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (vx1 + vx2) + UbMath::c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq));
-         case SW: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (-vx1 - vx2) + UbMath::c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq));
-         case SE: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (vx1 - vx2) + UbMath::c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq));
-         case NW: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (-vx1 + vx2) + UbMath::c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq));
-         case TE: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (vx1 + vx3) + UbMath::c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq));
-         case BW: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (-vx1 - vx3) + UbMath::c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq));
-         case BE: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (vx1 - vx3) + UbMath::c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq));
-         case TW: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (-vx1 + vx3) + UbMath::c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq));
-         case TN: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (vx2 + vx3) + UbMath::c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq));
-         case BS: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (-vx2 - vx3) + UbMath::c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq));
-         case BN: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (vx2 - vx3) + UbMath::c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq));
-         case TS: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (-vx2 + vx3) + UbMath::c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq));
-         case TNE: return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (vx1 + vx2 + vx3) + UbMath::c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq));
-         case BSW: return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (-vx1 - vx2 - vx3) + UbMath::c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq));
-         case BNE: return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (vx1 + vx2 - vx3) + UbMath::c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq));
-         case TSW: return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (-vx1 - vx2 + vx3) + UbMath::c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq));
-         case TSE: return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (vx1 - vx2 + vx3) + UbMath::c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq));
-         case BNW: return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (-vx1 + vx2 - vx3) + UbMath::c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq));
-         case BSE: return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (vx1 - vx2 - vx3) + UbMath::c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq));
-         case TNW: return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (-vx1 + vx2 + vx3) + UbMath::c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq));
-         default: throw UbException(UB_EXARGS, "unknown dir");
-         }
-      }
-      //////////////////////////////////////////////////////////////////////////
-      static void calcIncompFeq(LBMReal* const& feq/*[27]*/, const LBMReal& drho, const LBMReal& vx1, const LBMReal& vx2, const LBMReal& vx3)
-      {
-         LBMReal cu_sq = 1.5 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3);
+     switch (direction)
+     {
+     case ZERO: return REAL_CAST(UbMath::c8o27 * (drho - cu_sq));
+     case E: return REAL_CAST(UbMath::c2o27 * (drho + 3.0 * (vx1)+UbMath::c9o2 * (vx1) * (vx1)-cu_sq));
+     case W: return REAL_CAST(UbMath::c2o27 * (drho + 3.0 * (-vx1) + UbMath::c9o2 * (-vx1) * (-vx1) - cu_sq));
+     case N: return REAL_CAST(UbMath::c2o27 * (drho + 3.0 * (vx2)+UbMath::c9o2 * (vx2) * (vx2)-cu_sq));
+     case S: return REAL_CAST(UbMath::c2o27 * (drho + 3.0 * (-vx2) + UbMath::c9o2 * (-vx2) * (-vx2) - cu_sq));
+     case T: return REAL_CAST(UbMath::c2o27 * (drho + 3.0 * (vx3)+UbMath::c9o2 * (vx3) * (vx3)-cu_sq));
+     case B: return REAL_CAST(UbMath::c2o27 * (drho + 3.0 * (-vx3) + UbMath::c9o2 * (-vx3) * (-vx3) - cu_sq));
+     case NE: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (vx1 + vx2) + UbMath::c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq));
+     case SW: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (-vx1 - vx2) + UbMath::c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq));
+     case SE: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (vx1 - vx2) + UbMath::c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq));
+     case NW: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (-vx1 + vx2) + UbMath::c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq));
+     case TE: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (vx1 + vx3) + UbMath::c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq));
+     case BW: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (-vx1 - vx3) + UbMath::c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq));
+     case BE: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (vx1 - vx3) + UbMath::c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq));
+     case TW: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (-vx1 + vx3) + UbMath::c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq));
+     case TN: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (vx2 + vx3) + UbMath::c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq));
+     case BS: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (-vx2 - vx3) + UbMath::c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq));
+     case BN: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (vx2 - vx3) + UbMath::c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq));
+     case TS: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (-vx2 + vx3) + UbMath::c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq));
+     case TNE: return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (vx1 + vx2 + vx3) + UbMath::c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq));
+     case BSW: return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (-vx1 - vx2 - vx3) + UbMath::c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq));
+     case BNE: return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (vx1 + vx2 - vx3) + UbMath::c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq));
+     case TSW: return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (-vx1 - vx2 + vx3) + UbMath::c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq));
+     case TSE: return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (vx1 - vx2 + vx3) + UbMath::c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq));
+     case BNW: return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (-vx1 + vx2 - vx3) + UbMath::c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq));
+     case BSE: return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (vx1 - vx2 - vx3) + UbMath::c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq));
+     case TNW: return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (-vx1 + vx2 + vx3) + UbMath::c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq));
+     default: throw UbException(UB_EXARGS, "unknown dir");
+     }
+  }
+  //////////////////////////////////////////////////////////////////////////
+  static void calcIncompFeq(LBMReal* const& feq/*[27]*/, const LBMReal& drho, const LBMReal& vx1, const LBMReal& vx2, const LBMReal& vx3)
+  {
+     LBMReal cu_sq = 1.5 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3);
 
-         feq[ZERO] = UbMath::c8o27 * (drho - cu_sq);
-         feq[E] = UbMath::c2o27 * (drho + 3.0 * (vx1)+UbMath::c9o2 * (vx1) * (vx1)-cu_sq);
-         feq[W] = UbMath::c2o27 * (drho + 3.0 * (-vx1) + UbMath::c9o2 * (-vx1) * (-vx1) - cu_sq);
-         feq[N] = UbMath::c2o27 * (drho + 3.0 * (vx2)+UbMath::c9o2 * (vx2) * (vx2)-cu_sq);
-         feq[S] = UbMath::c2o27 * (drho + 3.0 * (-vx2) + UbMath::c9o2 * (-vx2) * (-vx2) - cu_sq);
-         feq[T] = UbMath::c2o27 * (drho + 3.0 * (vx3)+UbMath::c9o2 * (vx3) * (vx3)-cu_sq);
-         feq[B] = UbMath::c2o27 * (drho + 3.0 * (-vx3) + UbMath::c9o2 * (-vx3) * (-vx3) - cu_sq);
-         feq[NE] = UbMath::c1o54 * (drho + 3.0 * (vx1 + vx2) + UbMath::c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq);
-         feq[SW] = UbMath::c1o54 * (drho + 3.0 * (-vx1 - vx2) + UbMath::c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq);
-         feq[SE] = UbMath::c1o54 * (drho + 3.0 * (vx1 - vx2) + UbMath::c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq);
-         feq[NW] = UbMath::c1o54 * (drho + 3.0 * (-vx1 + vx2) + UbMath::c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq);
-         feq[TE] = UbMath::c1o54 * (drho + 3.0 * (vx1 + vx3) + UbMath::c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq);
-         feq[BW] = UbMath::c1o54 * (drho + 3.0 * (-vx1 - vx3) + UbMath::c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq);
-         feq[BE] = UbMath::c1o54 * (drho + 3.0 * (vx1 - vx3) + UbMath::c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq);
-         feq[TW] = UbMath::c1o54 * (drho + 3.0 * (-vx1 + vx3) + UbMath::c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq);
-         feq[TN] = UbMath::c1o54 * (drho + 3.0 * (vx2 + vx3) + UbMath::c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq);
-         feq[BS] = UbMath::c1o54 * (drho + 3.0 * (-vx2 - vx3) + UbMath::c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq);
-         feq[BN] = UbMath::c1o54 * (drho + 3.0 * (vx2 - vx3) + UbMath::c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq);
-         feq[TS] = UbMath::c1o54 * (drho + 3.0 * (-vx2 + vx3) + UbMath::c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq);
-         feq[TNE] = UbMath::c1o216 * (drho + 3.0 * (vx1 + vx2 + vx3) + UbMath::c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq);
-         feq[BSW] = UbMath::c1o216 * (drho + 3.0 * (-vx1 - vx2 - vx3) + UbMath::c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq);
-         feq[BNE] = UbMath::c1o216 * (drho + 3.0 * (vx1 + vx2 - vx3) + UbMath::c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq);
-         feq[TSW] = UbMath::c1o216 * (drho + 3.0 * (-vx1 - vx2 + vx3) + UbMath::c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq);
-         feq[TSE] = UbMath::c1o216 * (drho + 3.0 * (vx1 - vx2 + vx3) + UbMath::c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq);
-         feq[BNW] = UbMath::c1o216 * (drho + 3.0 * (-vx1 + vx2 - vx3) + UbMath::c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq);
-         feq[BSE] = UbMath::c1o216 * (drho + 3.0 * (vx1 - vx2 - vx3) + UbMath::c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq);
-         feq[TNW] = UbMath::c1o216 * (drho + 3.0 * (-vx1 + vx2 + vx3) + UbMath::c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq);
-      }
-      //////////////////////////////////////////////////////////////////////////
-      static inline float getBoundaryVelocityForDirection(const int& direction, const float& bcVelocityX1, const float& bcVelocityX2, const float& bcVelocityX3)
-      {
-         switch (direction)
-         {
-         case E:   return (float)(UbMath::c4o9 * (+bcVelocityX1));
-         case W:   return (float)(UbMath::c4o9 * (-bcVelocityX1));
-         case N:   return (float)(UbMath::c4o9 * (+bcVelocityX2));
-         case S:   return (float)(UbMath::c4o9 * (-bcVelocityX2));
-         case T:   return (float)(UbMath::c4o9 * (+bcVelocityX3));
-         case B:   return (float)(UbMath::c4o9 * (-bcVelocityX3));
-         case NE:  return (float)(UbMath::c1o9 * (+bcVelocityX1 + bcVelocityX2));
-         case SW:  return (float)(UbMath::c1o9 * (-bcVelocityX1 - bcVelocityX2));
-         case SE:  return (float)(UbMath::c1o9 * (+bcVelocityX1 - bcVelocityX2));
-         case NW:  return (float)(UbMath::c1o9 * (-bcVelocityX1 + bcVelocityX2));
-         case TE:  return (float)(UbMath::c1o9 * (+bcVelocityX1 + bcVelocityX3));
-         case BW:  return (float)(UbMath::c1o9 * (-bcVelocityX1 - bcVelocityX3));
-         case BE:  return (float)(UbMath::c1o9 * (+bcVelocityX1 - bcVelocityX3));
-         case TW:  return (float)(UbMath::c1o9 * (-bcVelocityX1 + bcVelocityX3));
-         case TN:  return (float)(UbMath::c1o9 * (+bcVelocityX2 + bcVelocityX3));
-         case BS:  return (float)(UbMath::c1o9 * (-bcVelocityX2 - bcVelocityX3));
-         case BN:  return (float)(UbMath::c1o9 * (+bcVelocityX2 - bcVelocityX3));
-         case TS:  return (float)(UbMath::c1o9 * (-bcVelocityX2 + bcVelocityX3));
-         case TNE: return (float)(UbMath::c1o36 * (+bcVelocityX1 + bcVelocityX2 + bcVelocityX3));
-         case BSW: return (float)(UbMath::c1o36 * (-bcVelocityX1 - bcVelocityX2 - bcVelocityX3));
-         case BNE: return (float)(UbMath::c1o36 * (+bcVelocityX1 + bcVelocityX2 - bcVelocityX3));
-         case TSW: return (float)(UbMath::c1o36 * (-bcVelocityX1 - bcVelocityX2 + bcVelocityX3));
-         case TSE: return (float)(UbMath::c1o36 * (+bcVelocityX1 - bcVelocityX2 + bcVelocityX3));
-         case BNW: return (float)(UbMath::c1o36 * (-bcVelocityX1 + bcVelocityX2 - bcVelocityX3));
-         case BSE: return (float)(UbMath::c1o36 * (+bcVelocityX1 - bcVelocityX2 - bcVelocityX3));
-         case TNW: return (float)(UbMath::c1o36 * (-bcVelocityX1 + bcVelocityX2 + bcVelocityX3));
-         default: throw UbException(UB_EXARGS, "unknown direction");
-         }
-      }
-      /*=====================================================================*/
-      static const int& getInvertDirection(const int& direction)
-      {
+     feq[ZERO] = UbMath::c8o27 * (drho - cu_sq);
+     feq[E] = UbMath::c2o27 * (drho + 3.0 * (vx1)+UbMath::c9o2 * (vx1) * (vx1)-cu_sq);
+     feq[W] = UbMath::c2o27 * (drho + 3.0 * (-vx1) + UbMath::c9o2 * (-vx1) * (-vx1) - cu_sq);
+     feq[N] = UbMath::c2o27 * (drho + 3.0 * (vx2)+UbMath::c9o2 * (vx2) * (vx2)-cu_sq);
+     feq[S] = UbMath::c2o27 * (drho + 3.0 * (-vx2) + UbMath::c9o2 * (-vx2) * (-vx2) - cu_sq);
+     feq[T] = UbMath::c2o27 * (drho + 3.0 * (vx3)+UbMath::c9o2 * (vx3) * (vx3)-cu_sq);
+     feq[B] = UbMath::c2o27 * (drho + 3.0 * (-vx3) + UbMath::c9o2 * (-vx3) * (-vx3) - cu_sq);
+     feq[NE] = UbMath::c1o54 * (drho + 3.0 * (vx1 + vx2) + UbMath::c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq);
+     feq[SW] = UbMath::c1o54 * (drho + 3.0 * (-vx1 - vx2) + UbMath::c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq);
+     feq[SE] = UbMath::c1o54 * (drho + 3.0 * (vx1 - vx2) + UbMath::c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq);
+     feq[NW] = UbMath::c1o54 * (drho + 3.0 * (-vx1 + vx2) + UbMath::c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq);
+     feq[TE] = UbMath::c1o54 * (drho + 3.0 * (vx1 + vx3) + UbMath::c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq);
+     feq[BW] = UbMath::c1o54 * (drho + 3.0 * (-vx1 - vx3) + UbMath::c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq);
+     feq[BE] = UbMath::c1o54 * (drho + 3.0 * (vx1 - vx3) + UbMath::c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq);
+     feq[TW] = UbMath::c1o54 * (drho + 3.0 * (-vx1 + vx3) + UbMath::c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq);
+     feq[TN] = UbMath::c1o54 * (drho + 3.0 * (vx2 + vx3) + UbMath::c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq);
+     feq[BS] = UbMath::c1o54 * (drho + 3.0 * (-vx2 - vx3) + UbMath::c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq);
+     feq[BN] = UbMath::c1o54 * (drho + 3.0 * (vx2 - vx3) + UbMath::c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq);
+     feq[TS] = UbMath::c1o54 * (drho + 3.0 * (-vx2 + vx3) + UbMath::c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq);
+     feq[TNE] = UbMath::c1o216 * (drho + 3.0 * (vx1 + vx2 + vx3) + UbMath::c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq);
+     feq[BSW] = UbMath::c1o216 * (drho + 3.0 * (-vx1 - vx2 - vx3) + UbMath::c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq);
+     feq[BNE] = UbMath::c1o216 * (drho + 3.0 * (vx1 + vx2 - vx3) + UbMath::c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq);
+     feq[TSW] = UbMath::c1o216 * (drho + 3.0 * (-vx1 - vx2 + vx3) + UbMath::c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq);
+     feq[TSE] = UbMath::c1o216 * (drho + 3.0 * (vx1 - vx2 + vx3) + UbMath::c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq);
+     feq[BNW] = UbMath::c1o216 * (drho + 3.0 * (-vx1 + vx2 - vx3) + UbMath::c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq);
+     feq[BSE] = UbMath::c1o216 * (drho + 3.0 * (vx1 - vx2 - vx3) + UbMath::c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq);
+     feq[TNW] = UbMath::c1o216 * (drho + 3.0 * (-vx1 + vx2 + vx3) + UbMath::c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq);
+  }
+  //////////////////////////////////////////////////////////////////////////
+  static inline float getBoundaryVelocityForDirection(const int& direction, const float& bcVelocityX1, const float& bcVelocityX2, const float& bcVelocityX3)
+  {
+     switch (direction)
+     {
+     case E:   return (float)(UbMath::c4o9 * (+bcVelocityX1));
+     case W:   return (float)(UbMath::c4o9 * (-bcVelocityX1));
+     case N:   return (float)(UbMath::c4o9 * (+bcVelocityX2));
+     case S:   return (float)(UbMath::c4o9 * (-bcVelocityX2));
+     case T:   return (float)(UbMath::c4o9 * (+bcVelocityX3));
+     case B:   return (float)(UbMath::c4o9 * (-bcVelocityX3));
+     case NE:  return (float)(UbMath::c1o9 * (+bcVelocityX1 + bcVelocityX2));
+     case SW:  return (float)(UbMath::c1o9 * (-bcVelocityX1 - bcVelocityX2));
+     case SE:  return (float)(UbMath::c1o9 * (+bcVelocityX1 - bcVelocityX2));
+     case NW:  return (float)(UbMath::c1o9 * (-bcVelocityX1 + bcVelocityX2));
+     case TE:  return (float)(UbMath::c1o9 * (+bcVelocityX1 + bcVelocityX3));
+     case BW:  return (float)(UbMath::c1o9 * (-bcVelocityX1 - bcVelocityX3));
+     case BE:  return (float)(UbMath::c1o9 * (+bcVelocityX1 - bcVelocityX3));
+     case TW:  return (float)(UbMath::c1o9 * (-bcVelocityX1 + bcVelocityX3));
+     case TN:  return (float)(UbMath::c1o9 * (+bcVelocityX2 + bcVelocityX3));
+     case BS:  return (float)(UbMath::c1o9 * (-bcVelocityX2 - bcVelocityX3));
+     case BN:  return (float)(UbMath::c1o9 * (+bcVelocityX2 - bcVelocityX3));
+     case TS:  return (float)(UbMath::c1o9 * (-bcVelocityX2 + bcVelocityX3));
+     case TNE: return (float)(UbMath::c1o36 * (+bcVelocityX1 + bcVelocityX2 + bcVelocityX3));
+     case BSW: return (float)(UbMath::c1o36 * (-bcVelocityX1 - bcVelocityX2 - bcVelocityX3));
+     case BNE: return (float)(UbMath::c1o36 * (+bcVelocityX1 + bcVelocityX2 - bcVelocityX3));
+     case TSW: return (float)(UbMath::c1o36 * (-bcVelocityX1 - bcVelocityX2 + bcVelocityX3));
+     case TSE: return (float)(UbMath::c1o36 * (+bcVelocityX1 - bcVelocityX2 + bcVelocityX3));
+     case BNW: return (float)(UbMath::c1o36 * (-bcVelocityX1 + bcVelocityX2 - bcVelocityX3));
+     case BSE: return (float)(UbMath::c1o36 * (+bcVelocityX1 - bcVelocityX2 - bcVelocityX3));
+     case TNW: return (float)(UbMath::c1o36 * (-bcVelocityX1 + bcVelocityX2 + bcVelocityX3));
+     default: throw UbException(UB_EXARGS, "unknown direction");
+     }
+  }
+  /*=====================================================================*/
+  static const int& getInvertDirection(const int& direction)
+  {
 #ifdef _DEBUG
-         if (direction<STARTDIR || direction>ENDDIR)
-            throw UbException(UB_EXARGS, "unknown direction");
+     if (direction<STARTDIR || direction>ENDDIR)
+        throw UbException(UB_EXARGS, "unknown direction");
 #endif
-         return INVDIR[direction];
-      }
-      /*=====================================================================*/
-      static void getLBMDirections(std::vector<int>& dirs, bool onlyLBdirs = false)
-      {
-         std::vector<int> D3Q27Dirs;
-         if (onlyLBdirs) /*FSTARTDIR->FENDDIR*/
-         {
-            dirs.resize(FENDDIR + 1);
-            for (int dir = FSTARTDIR; dir <= FENDDIR; ++dir)
-               dirs[dir] = dir;
-         }
-         else /*STARTDIR->ENDDIR*/
-         {
-            dirs.resize(ENDDIR + 1);
-            for (int dir = STARTDIR; dir <= ENDDIR; ++dir)
-               dirs[dir] = dir;
-         }
-      }
-      //////////////////////////////////////////////////////////////////////////
-      static std::vector<int> getEX(const int& exn)
-      {
-         std::vector<int> ex;
-         ex.resize(ENDDIR + 1);
-         switch (exn)
-         {
-         case 1:
-            for (int dir = STARTDIR; dir < ENDDIR; ++dir)
-               ex[dir] = DX1[dir];
-            break;
-         case 2:
-            for (int dir = STARTDIR; dir < ENDDIR; ++dir)
-               ex[dir] = DX2[dir];
-            break;
-         case 3:
-            for (int dir = STARTDIR; dir < ENDDIR; ++dir)
-               ex[dir] = DX3[dir];
-            break;
-         }
-         return ex;
-      }
-      //////////////////////////////////////////////////////////////////////////
-      static inline void calcDistanceToNeighbors(std::vector<double>& distNeigh, const double& deltaX1)
-      {
-         //distNeigh.resize(FENDDIR+1, UbMath::sqrt2*deltaX1);
+     return INVDIR[direction];
+  }
+  /*=====================================================================*/
+  static void getLBMDirections(std::vector<int>& dirs, bool onlyLBdirs = false)
+  {
+     std::vector<int> D3Q27Dirs;
+     if (onlyLBdirs) /*FSTARTDIR->FENDDIR*/
+     {
+        dirs.resize(FENDDIR + 1);
+        for (int dir = FSTARTDIR; dir <= FENDDIR; ++dir)
+           dirs[dir] = dir;
+     }
+     else /*STARTDIR->ENDDIR*/
+     {
+        dirs.resize(ENDDIR + 1);
+        for (int dir = STARTDIR; dir <= ENDDIR; ++dir)
+           dirs[dir] = dir;
+     }
+  }
+  //////////////////////////////////////////////////////////////////////////
+  static std::vector<int> getEX(const int& exn)
+  {
+     std::vector<int> ex;
+     ex.resize(ENDDIR + 1);
+     switch (exn)
+     {
+     case 1:
+        for (int dir = STARTDIR; dir < ENDDIR; ++dir)
+           ex[dir] = DX1[dir];
+        break;
+     case 2:
+        for (int dir = STARTDIR; dir < ENDDIR; ++dir)
+           ex[dir] = DX2[dir];
+        break;
+     case 3:
+        for (int dir = STARTDIR; dir < ENDDIR; ++dir)
+           ex[dir] = DX3[dir];
+        break;
+     }
+     return ex;
+  }
+  //////////////////////////////////////////////////////////////////////////
+  static inline void calcDistanceToNeighbors(std::vector<double>& distNeigh, const double& deltaX1)
+  {
+     //distNeigh.resize(FENDDIR+1, UbMath::sqrt2*deltaX1);
 
-         distNeigh[E] = distNeigh[W] = distNeigh[N] = deltaX1;
-         distNeigh[S] = distNeigh[T] = distNeigh[B] = deltaX1;
-         distNeigh[NE] = distNeigh[NW] = distNeigh[SW] = distNeigh[SE] = UbMath::sqrt2 * deltaX1;
-         distNeigh[TE] = distNeigh[TN] = distNeigh[TW] = distNeigh[TS] = UbMath::sqrt2 * deltaX1;
-         distNeigh[BE] = distNeigh[BN] = distNeigh[BW] = distNeigh[BS] = UbMath::sqrt2 * deltaX1;
-         distNeigh[TNE] = distNeigh[TNW] = distNeigh[TSE] = distNeigh[TSW] = UbMath::sqrt3 * deltaX1;
-         distNeigh[BNE] = distNeigh[BNW] = distNeigh[BSE] = distNeigh[BSW] = UbMath::sqrt3 * deltaX1;
-      }
-      //////////////////////////////////////////////////////////////////////////
-      static inline void calcDistanceToNeighbors(std::vector<double>& distNeigh, const double& deltaX1, const double& deltaX2, const double& deltaX3)
-      {
-         //distNeigh.resize(FENDDIR+1, UbMath::sqrt2*deltaX1);
-         distNeigh[E] = distNeigh[W] = deltaX1;
-         distNeigh[N] = distNeigh[S] = deltaX2;
-         distNeigh[T] = distNeigh[B] = deltaX3;
-         distNeigh[NE] = distNeigh[NW] = distNeigh[SW] = distNeigh[SE] = sqrt(deltaX1 * deltaX1 + deltaX2 * deltaX2);
-         distNeigh[TE] = distNeigh[TN] = distNeigh[TW] = distNeigh[TS] = sqrt(deltaX1 * deltaX1 + deltaX3 * deltaX3);
-         distNeigh[BE] = distNeigh[BN] = distNeigh[BW] = distNeigh[BS] = sqrt(deltaX2 * deltaX2 + deltaX3 * deltaX3);
-         distNeigh[TNE] = distNeigh[TNW] = distNeigh[TSE] = distNeigh[TSW] = sqrt(deltaX1 * deltaX1 + deltaX2 * deltaX2 + deltaX3 * deltaX3);
-         distNeigh[BNE] = distNeigh[BNW] = distNeigh[BSE] = distNeigh[BSW] = sqrt(deltaX1 * deltaX1 + deltaX2 * deltaX2 + deltaX3 * deltaX3);
-      }
-      //////////////////////////////////////////////////////////////////////////
-      static inline void initRayVectors(double* const& rayX1, double* const& rayX2, double* const& rayX3)
-      {
-         int fdir;
-         double c1oS2 = UbMath::one_over_sqrt2;
-         double c1oS3 = UbMath::one_over_sqrt3;
-         fdir = E;  rayX1[fdir] = 1.0;   rayX2[fdir] = 0.0;   rayX3[fdir] = 0.0;
-         fdir = W;  rayX1[fdir] = -1.0;   rayX2[fdir] = 0.0;   rayX3[fdir] = 0.0;
-         fdir = N;  rayX1[fdir] = 0.0;   rayX2[fdir] = 1.0;   rayX3[fdir] = 0.0;
-         fdir = S;  rayX1[fdir] = 0.0;   rayX2[fdir] = -1.0;   rayX3[fdir] = 0.0;
-         fdir = T;  rayX1[fdir] = 0.0;   rayX2[fdir] = 0.0;   rayX3[fdir] = 1.0;
-         fdir = B;  rayX1[fdir] = 0.0;   rayX2[fdir] = 0.0;   rayX3[fdir] = -1.0;
-         fdir = NE; rayX1[fdir] = c1oS2; rayX2[fdir] = c1oS2; rayX3[fdir] = 0.0;
-         fdir = SW; rayX1[fdir] = -c1oS2; rayX2[fdir] = -c1oS2; rayX3[fdir] = 0.0;
-         fdir = SE; rayX1[fdir] = c1oS2; rayX2[fdir] = -c1oS2; rayX3[fdir] = 0.0;
-         fdir = NW; rayX1[fdir] = -c1oS2; rayX2[fdir] = c1oS2; rayX3[fdir] = 0.0;
-         fdir = TE; rayX1[fdir] = c1oS2; rayX2[fdir] = 0.0;    rayX3[fdir] = c1oS2;
-         fdir = BW; rayX1[fdir] = -c1oS2; rayX2[fdir] = 0.0;    rayX3[fdir] = -c1oS2;
-         fdir = BE; rayX1[fdir] = c1oS2; rayX2[fdir] = 0.0;    rayX3[fdir] = -c1oS2;
-         fdir = TW; rayX1[fdir] = -c1oS2; rayX2[fdir] = 0.0;    rayX3[fdir] = c1oS2;
-         fdir = TN; rayX1[fdir] = 0.0;   rayX2[fdir] = c1oS2;  rayX3[fdir] = c1oS2;
-         fdir = BS; rayX1[fdir] = 0.0;   rayX2[fdir] = -c1oS2;  rayX3[fdir] = -c1oS2;
-         fdir = BN; rayX1[fdir] = 0.0;   rayX2[fdir] = c1oS2;  rayX3[fdir] = -c1oS2;
-         fdir = TS; rayX1[fdir] = 0.0;   rayX2[fdir] = -c1oS2;  rayX3[fdir] = c1oS2;
-         fdir = TNE; rayX1[fdir] = c1oS3; rayX2[fdir] = c1oS3; rayX3[fdir] = c1oS3;
-         fdir = TNW; rayX1[fdir] = -c1oS3; rayX2[fdir] = c1oS3; rayX3[fdir] = c1oS3;
-         fdir = TSE; rayX1[fdir] = c1oS3; rayX2[fdir] = -c1oS3; rayX3[fdir] = c1oS3;
-         fdir = TSW; rayX1[fdir] = -c1oS3; rayX2[fdir] = -c1oS3; rayX3[fdir] = c1oS3;
-         fdir = BNE; rayX1[fdir] = c1oS3; rayX2[fdir] = c1oS3; rayX3[fdir] = -c1oS3;
-         fdir = BNW; rayX1[fdir] = -c1oS3; rayX2[fdir] = c1oS3; rayX3[fdir] = -c1oS3;
-         fdir = BSE; rayX1[fdir] = c1oS3; rayX2[fdir] = -c1oS3; rayX3[fdir] = -c1oS3;
-         fdir = BSW; rayX1[fdir] = -c1oS3; rayX2[fdir] = -c1oS3; rayX3[fdir] = -c1oS3;
-      }
-      //////////////////////////////////////////////////////////////////////////
-      static inline LBMReal calcPress(const LBMReal* const f, LBMReal rho, LBMReal vx1, LBMReal vx2, LBMReal vx3)
-      {
-         LBMReal op = 1.0;
-         return ((f[E] + f[W] + f[N] + f[S] + f[T] + f[B] + 2. * (f[NE] + f[SW] + f[SE] + f[NW] + f[TE] + f[BW] + f[BE] + f[TW] + f[TN] + f[BS] + f[BN] + f[TS]) +
-            3. * (f[TNE] + f[TSW] + f[TSE] + f[TNW] + f[BNE] + f[BSW] + f[BSE] + f[BNW]) - (vx1 * vx1 + vx2 * vx2 + vx3 * vx3)) * (1 - 0.5 * op) + op * 0.5 * (rho)) * UbMath::c1o3;
+     distNeigh[E] = distNeigh[W] = distNeigh[N] = deltaX1;
+     distNeigh[S] = distNeigh[T] = distNeigh[B] = deltaX1;
+     distNeigh[NE] = distNeigh[NW] = distNeigh[SW] = distNeigh[SE] = UbMath::sqrt2 * deltaX1;
+     distNeigh[TE] = distNeigh[TN] = distNeigh[TW] = distNeigh[TS] = UbMath::sqrt2 * deltaX1;
+     distNeigh[BE] = distNeigh[BN] = distNeigh[BW] = distNeigh[BS] = UbMath::sqrt2 * deltaX1;
+     distNeigh[TNE] = distNeigh[TNW] = distNeigh[TSE] = distNeigh[TSW] = UbMath::sqrt3 * deltaX1;
+     distNeigh[BNE] = distNeigh[BNW] = distNeigh[BSE] = distNeigh[BSW] = UbMath::sqrt3 * deltaX1;
+  }
+  //////////////////////////////////////////////////////////////////////////
+  static inline void calcDistanceToNeighbors(std::vector<double>& distNeigh, const double& deltaX1, const double& deltaX2, const double& deltaX3)
+  {
+     //distNeigh.resize(FENDDIR+1, UbMath::sqrt2*deltaX1);
+     distNeigh[E] = distNeigh[W] = deltaX1;
+     distNeigh[N] = distNeigh[S] = deltaX2;
+     distNeigh[T] = distNeigh[B] = deltaX3;
+     distNeigh[NE] = distNeigh[NW] = distNeigh[SW] = distNeigh[SE] = sqrt(deltaX1 * deltaX1 + deltaX2 * deltaX2);
+     distNeigh[TE] = distNeigh[TN] = distNeigh[TW] = distNeigh[TS] = sqrt(deltaX1 * deltaX1 + deltaX3 * deltaX3);
+     distNeigh[BE] = distNeigh[BN] = distNeigh[BW] = distNeigh[BS] = sqrt(deltaX2 * deltaX2 + deltaX3 * deltaX3);
+     distNeigh[TNE] = distNeigh[TNW] = distNeigh[TSE] = distNeigh[TSW] = sqrt(deltaX1 * deltaX1 + deltaX2 * deltaX2 + deltaX3 * deltaX3);
+     distNeigh[BNE] = distNeigh[BNW] = distNeigh[BSE] = distNeigh[BSW] = sqrt(deltaX1 * deltaX1 + deltaX2 * deltaX2 + deltaX3 * deltaX3);
+  }
+  //////////////////////////////////////////////////////////////////////////
+  static inline void initRayVectors(double* const& rayX1, double* const& rayX2, double* const& rayX3)
+  {
+     int fdir;
+     double c1oS2 = UbMath::one_over_sqrt2;
+     double c1oS3 = UbMath::one_over_sqrt3;
+     fdir = E;  rayX1[fdir] = 1.0;   rayX2[fdir] = 0.0;   rayX3[fdir] = 0.0;
+     fdir = W;  rayX1[fdir] = -1.0;   rayX2[fdir] = 0.0;   rayX3[fdir] = 0.0;
+     fdir = N;  rayX1[fdir] = 0.0;   rayX2[fdir] = 1.0;   rayX3[fdir] = 0.0;
+     fdir = S;  rayX1[fdir] = 0.0;   rayX2[fdir] = -1.0;   rayX3[fdir] = 0.0;
+     fdir = T;  rayX1[fdir] = 0.0;   rayX2[fdir] = 0.0;   rayX3[fdir] = 1.0;
+     fdir = B;  rayX1[fdir] = 0.0;   rayX2[fdir] = 0.0;   rayX3[fdir] = -1.0;
+     fdir = NE; rayX1[fdir] = c1oS2; rayX2[fdir] = c1oS2; rayX3[fdir] = 0.0;
+     fdir = SW; rayX1[fdir] = -c1oS2; rayX2[fdir] = -c1oS2; rayX3[fdir] = 0.0;
+     fdir = SE; rayX1[fdir] = c1oS2; rayX2[fdir] = -c1oS2; rayX3[fdir] = 0.0;
+     fdir = NW; rayX1[fdir] = -c1oS2; rayX2[fdir] = c1oS2; rayX3[fdir] = 0.0;
+     fdir = TE; rayX1[fdir] = c1oS2; rayX2[fdir] = 0.0;    rayX3[fdir] = c1oS2;
+     fdir = BW; rayX1[fdir] = -c1oS2; rayX2[fdir] = 0.0;    rayX3[fdir] = -c1oS2;
+     fdir = BE; rayX1[fdir] = c1oS2; rayX2[fdir] = 0.0;    rayX3[fdir] = -c1oS2;
+     fdir = TW; rayX1[fdir] = -c1oS2; rayX2[fdir] = 0.0;    rayX3[fdir] = c1oS2;
+     fdir = TN; rayX1[fdir] = 0.0;   rayX2[fdir] = c1oS2;  rayX3[fdir] = c1oS2;
+     fdir = BS; rayX1[fdir] = 0.0;   rayX2[fdir] = -c1oS2;  rayX3[fdir] = -c1oS2;
+     fdir = BN; rayX1[fdir] = 0.0;   rayX2[fdir] = c1oS2;  rayX3[fdir] = -c1oS2;
+     fdir = TS; rayX1[fdir] = 0.0;   rayX2[fdir] = -c1oS2;  rayX3[fdir] = c1oS2;
+     fdir = TNE; rayX1[fdir] = c1oS3; rayX2[fdir] = c1oS3; rayX3[fdir] = c1oS3;
+     fdir = TNW; rayX1[fdir] = -c1oS3; rayX2[fdir] = c1oS3; rayX3[fdir] = c1oS3;
+     fdir = TSE; rayX1[fdir] = c1oS3; rayX2[fdir] = -c1oS3; rayX3[fdir] = c1oS3;
+     fdir = TSW; rayX1[fdir] = -c1oS3; rayX2[fdir] = -c1oS3; rayX3[fdir] = c1oS3;
+     fdir = BNE; rayX1[fdir] = c1oS3; rayX2[fdir] = c1oS3; rayX3[fdir] = -c1oS3;
+     fdir = BNW; rayX1[fdir] = -c1oS3; rayX2[fdir] = c1oS3; rayX3[fdir] = -c1oS3;
+     fdir = BSE; rayX1[fdir] = c1oS3; rayX2[fdir] = -c1oS3; rayX3[fdir] = -c1oS3;
+     fdir = BSW; rayX1[fdir] = -c1oS3; rayX2[fdir] = -c1oS3; rayX3[fdir] = -c1oS3;
+  }
+  //////////////////////////////////////////////////////////////////////////
+  static inline LBMReal calcPress(const LBMReal* const f, LBMReal rho, LBMReal vx1, LBMReal vx2, LBMReal vx3)
+  {
+     LBMReal op = 1.0;
+     return ((f[E] + f[W] + f[N] + f[S] + f[T] + f[B] + 2. * (f[NE] + f[SW] + f[SE] + f[NW] + f[TE] + f[BW] + f[BE] + f[TW] + f[TN] + f[BS] + f[BN] + f[TS]) +
+        3. * (f[TNE] + f[TSW] + f[TSE] + f[TNW] + f[BNE] + f[BSW] + f[BSE] + f[BNW]) - (vx1 * vx1 + vx2 * vx2 + vx3 * vx3)) * (1 - 0.5 * op) + op * 0.5 * (rho)) * UbMath::c1o3;
 
-      }
-      //////////////////////////////////////////////////////////////////////////
-      static inline LBMReal getShearRate(const LBMReal* const f, LBMReal collFactorF)
-      {
-         LBMReal mfcbb = f[E];
-         LBMReal mfbcb = f[N];
-         LBMReal mfbbc = f[T];
-         LBMReal mfccb = f[NE];
-         LBMReal mfacb = f[NW];
-         LBMReal mfcbc = f[TE];
-         LBMReal mfabc = f[TW];
-         LBMReal mfbcc = f[TN];
-         LBMReal mfbac = f[TS];
-         LBMReal mfccc = f[TNE];
-         LBMReal mfacc = f[TNW];
-         LBMReal mfcac = f[TSE];
-         LBMReal mfaac = f[TSW];
+  }
+  //////////////////////////////////////////////////////////////////////////
+  static inline LBMReal getShearRate(const LBMReal* const f, LBMReal collFactorF)
+  {
+     LBMReal mfcbb = f[E];
+     LBMReal mfbcb = f[N];
+     LBMReal mfbbc = f[T];
+     LBMReal mfccb = f[NE];
+     LBMReal mfacb = f[NW];
+     LBMReal mfcbc = f[TE];
+     LBMReal mfabc = f[TW];
+     LBMReal mfbcc = f[TN];
+     LBMReal mfbac = f[TS];
+     LBMReal mfccc = f[TNE];
+     LBMReal mfacc = f[TNW];
+     LBMReal mfcac = f[TSE];
+     LBMReal mfaac = f[TSW];
 
-         LBMReal mfabb = f[W];
-         LBMReal mfbab = f[S];
-         LBMReal mfbba = f[B];
-         LBMReal mfaab = f[SW];
-         LBMReal mfcab = f[SE];
-         LBMReal mfaba = f[BW];
-         LBMReal mfcba = f[BE];
-         LBMReal mfbaa = f[BS];
-         LBMReal mfbca = f[BN];
-         LBMReal mfaaa = f[BSW];
-         LBMReal mfcaa = f[BSE];
-         LBMReal mfaca = f[BNW];
-         LBMReal mfcca = f[BNE];
+     LBMReal mfabb = f[W];
+     LBMReal mfbab = f[S];
+     LBMReal mfbba = f[B];
+     LBMReal mfaab = f[SW];
+     LBMReal mfcab = f[SE];
+     LBMReal mfaba = f[BW];
+     LBMReal mfcba = f[BE];
+     LBMReal mfbaa = f[BS];
+     LBMReal mfbca = f[BN];
+     LBMReal mfaaa = f[BSW];
+     LBMReal mfcaa = f[BSE];
+     LBMReal mfaca = f[BNW];
+     LBMReal mfcca = f[BNE];
 
-         LBMReal mfbbb = f[ZERO];
+     LBMReal mfbbb = f[ZERO];
 
-         LBMReal m0, m1, m2;
+     LBMReal m0, m1, m2;
 
-         LBMReal rho = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca)
-            + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc)
-            + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb;
+     LBMReal rho = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca)
+        + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc)
+        + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb;
 
-         LBMReal vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
-            (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
-            (mfcbb - mfabb));
-         LBMReal vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
-            (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
-            (mfbcb - mfbab));
-         LBMReal vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
-            (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
-            (mfbbc - mfbba));
+     LBMReal vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
+        (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
+        (mfcbb - mfabb));
+     LBMReal vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
+        (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
+        (mfbcb - mfbab));
+     LBMReal vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
+        (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
+        (mfbbc - mfbba));
 
-         //LBMReal OxxPyyPzz = 1.;
+     //LBMReal OxxPyyPzz = 1.;
 
-         LBMReal oMdrho;
+     LBMReal oMdrho;
 
-         oMdrho = mfccc + mfaaa;
-         m0 = mfaca + mfcac;
-         m1 = mfacc + mfcaa;
-         m2 = mfaac + mfcca;
-         oMdrho += m0;
-         m1 += m2;
-         oMdrho += m1;
-         m0 = mfbac + mfbca;
-         m1 = mfbaa + mfbcc;
-         m0 += m1;
-         m1 = mfabc + mfcba;
-         m2 = mfaba + mfcbc;
-         m1 += m2;
-         m0 += m1;
-         m1 = mfacb + mfcab;
-         m2 = mfaab + mfccb;
-         m1 += m2;
-         m0 += m1;
-         oMdrho += m0;
-         m0 = mfabb + mfcbb;
-         m1 = mfbab + mfbcb;
-         m2 = mfbba + mfbbc;
-         m0 += m1 + m2;
-         m0 += mfbbb; //hat gefehlt
-         oMdrho = 1. - (oMdrho + m0);
+     oMdrho = mfccc + mfaaa;
+     m0 = mfaca + mfcac;
+     m1 = mfacc + mfcaa;
+     m2 = mfaac + mfcca;
+     oMdrho += m0;
+     m1 += m2;
+     oMdrho += m1;
+     m0 = mfbac + mfbca;
+     m1 = mfbaa + mfbcc;
+     m0 += m1;
+     m1 = mfabc + mfcba;
+     m2 = mfaba + mfcbc;
+     m1 += m2;
+     m0 += m1;
+     m1 = mfacb + mfcab;
+     m2 = mfaab + mfccb;
+     m1 += m2;
+     m0 += m1;
+     oMdrho += m0;
+     m0 = mfabb + mfcbb;
+     m1 = mfbab + mfbcb;
+     m2 = mfbba + mfbbc;
+     m0 += m1 + m2;
+     m0 += mfbbb; //hat gefehlt
+     oMdrho = 1. - (oMdrho + m0);
 
-         LBMReal vx2;
-         LBMReal vy2;
-         LBMReal vz2;
-         vx2 = vvx * vvx;
-         vy2 = vvy * vvy;
-         vz2 = vvz * vvz;
-         ////////////////////////////////////////////////////////////////////////////////////
-         //Hin
-         ////////////////////////////////////////////////////////////////////////////////////
-         // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36  Konditionieren
-         ////////////////////////////////////////////////////////////////////////////////////
-         // Z - Dir
-         m2 = mfaaa + mfaac;
-         m1 = mfaac - mfaaa;
-         m0 = m2 + mfaab;
-         mfaaa = m0;
-         m0 += UbMath::c1o36 * oMdrho;
-         mfaab = m1 - m0 * vvz;
-         mfaac = m2 - 2. * m1 * vvz + vz2 * m0;
-         ////////////////////////////////////////////////////////////////////////////////////
-         m2 = mfaba + mfabc;
-         m1 = mfabc - mfaba;
-         m0 = m2 + mfabb;
-         mfaba = m0;
-         m0 += UbMath::c1o9 * oMdrho;
-         mfabb = m1 - m0 * vvz;
-         mfabc = m2 - 2. * m1 * vvz + vz2 * m0;
-         ////////////////////////////////////////////////////////////////////////////////////
-         m2 = mfaca + mfacc;
-         m1 = mfacc - mfaca;
-         m0 = m2 + mfacb;
-         mfaca = m0;
-         m0 += UbMath::c1o36 * oMdrho;
-         mfacb = m1 - m0 * vvz;
-         mfacc = m2 - 2. * m1 * vvz + vz2 * m0;
-         ////////////////////////////////////////////////////////////////////////////////////
-         ////////////////////////////////////////////////////////////////////////////////////
-         m2 = mfbaa + mfbac;
-         m1 = mfbac - mfbaa;
-         m0 = m2 + mfbab;
-         mfbaa = m0;
-         m0 += UbMath::c1o9 * oMdrho;
-         mfbab = m1 - m0 * vvz;
-         mfbac = m2 - 2. * m1 * vvz + vz2 * m0;
-         ////////////////////////////////////////////////////////////////////////////////////
-         m2 = mfbba + mfbbc;
-         m1 = mfbbc - mfbba;
-         m0 = m2 + mfbbb;
-         mfbba = m0;
-         m0 += UbMath::c4o9 * oMdrho;
-         mfbbb = m1 - m0 * vvz;
-         mfbbc = m2 - 2. * m1 * vvz + vz2 * m0;
-         ////////////////////////////////////////////////////////////////////////////////////
-         m2 = mfbca + mfbcc;
-         m1 = mfbcc - mfbca;
-         m0 = m2 + mfbcb;
-         mfbca = m0;
-         m0 += UbMath::c1o9 * oMdrho;
-         mfbcb = m1 - m0 * vvz;
-         mfbcc = m2 - 2. * m1 * vvz + vz2 * m0;
-         ////////////////////////////////////////////////////////////////////////////////////
-         ////////////////////////////////////////////////////////////////////////////////////
-         m2 = mfcaa + mfcac;
-         m1 = mfcac - mfcaa;
-         m0 = m2 + mfcab;
-         mfcaa = m0;
-         m0 += UbMath::c1o36 * oMdrho;
-         mfcab = m1 - m0 * vvz;
-         mfcac = m2 - 2. * m1 * vvz + vz2 * m0;
-         ////////////////////////////////////////////////////////////////////////////////////
-         m2 = mfcba + mfcbc;
-         m1 = mfcbc - mfcba;
-         m0 = m2 + mfcbb;
-         mfcba = m0;
-         m0 += UbMath::c1o9 * oMdrho;
-         mfcbb = m1 - m0 * vvz;
-         mfcbc = m2 - 2. * m1 * vvz + vz2 * m0;
-         ////////////////////////////////////////////////////////////////////////////////////
-         m2 = mfcca + mfccc;
-         m1 = mfccc - mfcca;
-         m0 = m2 + mfccb;
-         mfcca = m0;
-         m0 += UbMath::c1o36 * oMdrho;
-         mfccb = m1 - m0 * vvz;
-         mfccc = m2 - 2. * m1 * vvz + vz2 * m0;
-         ////////////////////////////////////////////////////////////////////////////////////
-         ////////////////////////////////////////////////////////////////////////////////////
-         // mit  1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren
-         ////////////////////////////////////////////////////////////////////////////////////
-         // Y - Dir
-         m2 = mfaaa + mfaca;
-         m1 = mfaca - mfaaa;
-         m0 = m2 + mfaba;
-         mfaaa = m0;
-         m0 += UbMath::c1o6 * oMdrho;
-         mfaba = m1 - m0 * vvy;
-         mfaca = m2 - 2. * m1 * vvy + vy2 * m0;
-         ////////////////////////////////////////////////////////////////////////////////////
-         m2 = mfaab + mfacb;
-         m1 = mfacb - mfaab;
-         m0 = m2 + mfabb;
-         mfaab = m0;
-         mfabb = m1 - m0 * vvy;
-         mfacb = m2 - 2. * m1 * vvy + vy2 * m0;
-         ////////////////////////////////////////////////////////////////////////////////////
-         m2 = mfaac + mfacc;
-         m1 = mfacc - mfaac;
-         m0 = m2 + mfabc;
-         mfaac = m0;
-         m0 += UbMath::c1o18 * oMdrho;
-         mfabc = m1 - m0 * vvy;
-         mfacc = m2 - 2. * m1 * vvy + vy2 * m0;
-         ////////////////////////////////////////////////////////////////////////////////////
-         ////////////////////////////////////////////////////////////////////////////////////
-         m2 = mfbaa + mfbca;
-         m1 = mfbca - mfbaa;
-         m0 = m2 + mfbba;
-         mfbaa = m0;
-         m0 += UbMath::c2o3 * oMdrho;
-         mfbba = m1 - m0 * vvy;
-         mfbca = m2 - 2. * m1 * vvy + vy2 * m0;
-         ////////////////////////////////////////////////////////////////////////////////////
-         m2 = mfbab + mfbcb;
-         m1 = mfbcb - mfbab;
-         m0 = m2 + mfbbb;
-         mfbab = m0;
-         mfbbb = m1 - m0 * vvy;
-         mfbcb = m2 - 2. * m1 * vvy + vy2 * m0;
-         ////////////////////////////////////////////////////////////////////////////////////
-         m2 = mfbac + mfbcc;
-         m1 = mfbcc - mfbac;
-         m0 = m2 + mfbbc;
-         mfbac = m0;
-         m0 += UbMath::c2o9 * oMdrho;
-         mfbbc = m1 - m0 * vvy;
-         mfbcc = m2 - 2. * m1 * vvy + vy2 * m0;
-         ////////////////////////////////////////////////////////////////////////////////////
-         ////////////////////////////////////////////////////////////////////////////////////
-         m2 = mfcaa + mfcca;
-         m1 = mfcca - mfcaa;
-         m0 = m2 + mfcba;
-         mfcaa = m0;
-         m0 += UbMath::c1o6 * oMdrho;
-         mfcba = m1 - m0 * vvy;
-         mfcca = m2 - 2. * m1 * vvy + vy2 * m0;
-         ////////////////////////////////////////////////////////////////////////////////////
-         m2 = mfcab + mfccb;
-         m1 = mfccb - mfcab;
-         m0 = m2 + mfcbb;
-         mfcab = m0;
-         mfcbb = m1 - m0 * vvy;
-         mfccb = m2 - 2. * m1 * vvy + vy2 * m0;
-         ////////////////////////////////////////////////////////////////////////////////////
-         m2 = mfcac + mfccc;
-         m1 = mfccc - mfcac;
-         m0 = m2 + mfcbc;
-         mfcac = m0;
-         m0 += UbMath::c1o18 * oMdrho;
-         mfcbc = m1 - m0 * vvy;
-         mfccc = m2 - 2. * m1 * vvy + vy2 * m0;
-         ////////////////////////////////////////////////////////////////////////////////////
-         ////////////////////////////////////////////////////////////////////////////////////
-         // mit     1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9            Konditionieren
-         ////////////////////////////////////////////////////////////////////////////////////
-         // X - Dir
-         m2 = mfaaa + mfcaa;
-         m1 = mfcaa - mfaaa;
-         m0 = m2 + mfbaa;
-         mfaaa = m0;
-         m0 += 1. * oMdrho;
-         mfbaa = m1 - m0 * vvx;
-         mfcaa = m2 - 2. * m1 * vvx + vx2 * m0;
-         ////////////////////////////////////////////////////////////////////////////////////
-         m2 = mfaba + mfcba;
-         m1 = mfcba - mfaba;
-         m0 = m2 + mfbba;
-         mfaba = m0;
-         mfbba = m1 - m0 * vvx;
-         mfcba = m2 - 2. * m1 * vvx + vx2 * m0;
-         ////////////////////////////////////////////////////////////////////////////////////
-         m2 = mfaca + mfcca;
-         m1 = mfcca - mfaca;
-         m0 = m2 + mfbca;
-         mfaca = m0;
-         m0 += UbMath::c1o3 * oMdrho;
-         mfbca = m1 - m0 * vvx;
-         mfcca = m2 - 2. * m1 * vvx + vx2 * m0;
-         ////////////////////////////////////////////////////////////////////////////////////
-         ////////////////////////////////////////////////////////////////////////////////////
-         m2 = mfaab + mfcab;
-         m1 = mfcab - mfaab;
-         m0 = m2 + mfbab;
-         mfaab = m0;
-         mfbab = m1 - m0 * vvx;
-         mfcab = m2 - 2. * m1 * vvx + vx2 * m0;
-         ////////////////////////////////////////////////////////////////////////////////////
-         m2 = mfabb + mfcbb;
-         m1 = mfcbb - mfabb;
-         m0 = m2 + mfbbb;
-         mfabb = m0;
-         mfbbb = m1 - m0 * vvx;
-         mfcbb = m2 - 2. * m1 * vvx + vx2 * m0;
-         ////////////////////////////////////////////////////////////////////////////////////
-         m2 = mfacb + mfccb;
-         m1 = mfccb - mfacb;
-         m0 = m2 + mfbcb;
-         mfacb = m0;
-         mfbcb = m1 - m0 * vvx;
-         mfccb = m2 - 2. * m1 * vvx + vx2 * m0;
-         ////////////////////////////////////////////////////////////////////////////////////
-         ////////////////////////////////////////////////////////////////////////////////////
-         m2 = mfaac + mfcac;
-         m1 = mfcac - mfaac;
-         m0 = m2 + mfbac;
-         mfaac = m0;
-         m0 += UbMath::c1o3 * oMdrho;
-         mfbac = m1 - m0 * vvx;
-         mfcac = m2 - 2. * m1 * vvx + vx2 * m0;
-         ////////////////////////////////////////////////////////////////////////////////////
-         m2 = mfabc + mfcbc;
-         m1 = mfcbc - mfabc;
-         m0 = m2 + mfbbc;
-         mfabc = m0;
-         mfbbc = m1 - m0 * vvx;
-         mfcbc = m2 - 2. * m1 * vvx + vx2 * m0;
-         ////////////////////////////////////////////////////////////////////////////////////
-         m2 = mfacc + mfccc;
-         m1 = mfccc - mfacc;
-         m0 = m2 + mfbcc;
-         mfacc = m0;
-         m0 += UbMath::c1o9 * oMdrho;
-         mfbcc = m1 - m0 * vvx;
-         mfccc = m2 - 2. * m1 * vvx + vx2 * m0;
-         ////////////////////////////////////////////////////////////////////////////////////
-         // Cumulants
-         ////////////////////////////////////////////////////////////////////////////////////
-         LBMReal OxxPyyPzz = 1.; //omega2 or bulk viscosity
-         // LBMReal OxyyPxzz = 1.;//-s9;//2+s9;//
-         // LBMReal OxyyMxzz  = 1.;//2+s9;//
+     LBMReal vx2;
+     LBMReal vy2;
+     LBMReal vz2;
+     vx2 = vvx * vvx;
+     vy2 = vvy * vvy;
+     vz2 = vvz * vvz;
+     ////////////////////////////////////////////////////////////////////////////////////
+     //Hin
+     ////////////////////////////////////////////////////////////////////////////////////
+     // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36  Konditionieren
+     ////////////////////////////////////////////////////////////////////////////////////
+     // Z - Dir
+     m2 = mfaaa + mfaac;
+     m1 = mfaac - mfaaa;
+     m0 = m2 + mfaab;
+     mfaaa = m0;
+     m0 += UbMath::c1o36 * oMdrho;
+     mfaab = m1 - m0 * vvz;
+     mfaac = m2 - 2. * m1 * vvz + vz2 * m0;
+     ////////////////////////////////////////////////////////////////////////////////////
+     m2 = mfaba + mfabc;
+     m1 = mfabc - mfaba;
+     m0 = m2 + mfabb;
+     mfaba = m0;
+     m0 += UbMath::c1o9 * oMdrho;
+     mfabb = m1 - m0 * vvz;
+     mfabc = m2 - 2. * m1 * vvz + vz2 * m0;
+     ////////////////////////////////////////////////////////////////////////////////////
+     m2 = mfaca + mfacc;
+     m1 = mfacc - mfaca;
+     m0 = m2 + mfacb;
+     mfaca = m0;
+     m0 += UbMath::c1o36 * oMdrho;
+     mfacb = m1 - m0 * vvz;
+     mfacc = m2 - 2. * m1 * vvz + vz2 * m0;
+     ////////////////////////////////////////////////////////////////////////////////////
+     ////////////////////////////////////////////////////////////////////////////////////
+     m2 = mfbaa + mfbac;
+     m1 = mfbac - mfbaa;
+     m0 = m2 + mfbab;
+     mfbaa = m0;
+     m0 += UbMath::c1o9 * oMdrho;
+     mfbab = m1 - m0 * vvz;
+     mfbac = m2 - 2. * m1 * vvz + vz2 * m0;
+     ////////////////////////////////////////////////////////////////////////////////////
+     m2 = mfbba + mfbbc;
+     m1 = mfbbc - mfbba;
+     m0 = m2 + mfbbb;
+     mfbba = m0;
+     m0 += UbMath::c4o9 * oMdrho;
+     mfbbb = m1 - m0 * vvz;
+     mfbbc = m2 - 2. * m1 * vvz + vz2 * m0;
+     ////////////////////////////////////////////////////////////////////////////////////
+     m2 = mfbca + mfbcc;
+     m1 = mfbcc - mfbca;
+     m0 = m2 + mfbcb;
+     mfbca = m0;
+     m0 += UbMath::c1o9 * oMdrho;
+     mfbcb = m1 - m0 * vvz;
+     mfbcc = m2 - 2. * m1 * vvz + vz2 * m0;
+     ////////////////////////////////////////////////////////////////////////////////////
+     ////////////////////////////////////////////////////////////////////////////////////
+     m2 = mfcaa + mfcac;
+     m1 = mfcac - mfcaa;
+     m0 = m2 + mfcab;
+     mfcaa = m0;
+     m0 += UbMath::c1o36 * oMdrho;
+     mfcab = m1 - m0 * vvz;
+     mfcac = m2 - 2. * m1 * vvz + vz2 * m0;
+     ////////////////////////////////////////////////////////////////////////////////////
+     m2 = mfcba + mfcbc;
+     m1 = mfcbc - mfcba;
+     m0 = m2 + mfcbb;
+     mfcba = m0;
+     m0 += UbMath::c1o9 * oMdrho;
+     mfcbb = m1 - m0 * vvz;
+     mfcbc = m2 - 2. * m1 * vvz + vz2 * m0;
+     ////////////////////////////////////////////////////////////////////////////////////
+     m2 = mfcca + mfccc;
+     m1 = mfccc - mfcca;
+     m0 = m2 + mfccb;
+     mfcca = m0;
+     m0 += UbMath::c1o36 * oMdrho;
+     mfccb = m1 - m0 * vvz;
+     mfccc = m2 - 2. * m1 * vvz + vz2 * m0;
+     ////////////////////////////////////////////////////////////////////////////////////
+     ////////////////////////////////////////////////////////////////////////////////////
+     // mit  1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren
+     ////////////////////////////////////////////////////////////////////////////////////
+     // Y - Dir
+     m2 = mfaaa + mfaca;
+     m1 = mfaca - mfaaa;
+     m0 = m2 + mfaba;
+     mfaaa = m0;
+     m0 += UbMath::c1o6 * oMdrho;
+     mfaba = m1 - m0 * vvy;
+     mfaca = m2 - 2. * m1 * vvy + vy2 * m0;
+     ////////////////////////////////////////////////////////////////////////////////////
+     m2 = mfaab + mfacb;
+     m1 = mfacb - mfaab;
+     m0 = m2 + mfabb;
+     mfaab = m0;
+     mfabb = m1 - m0 * vvy;
+     mfacb = m2 - 2. * m1 * vvy + vy2 * m0;
+     ////////////////////////////////////////////////////////////////////////////////////
+     m2 = mfaac + mfacc;
+     m1 = mfacc - mfaac;
+     m0 = m2 + mfabc;
+     mfaac = m0;
+     m0 += UbMath::c1o18 * oMdrho;
+     mfabc = m1 - m0 * vvy;
+     mfacc = m2 - 2. * m1 * vvy + vy2 * m0;
+     ////////////////////////////////////////////////////////////////////////////////////
+     ////////////////////////////////////////////////////////////////////////////////////
+     m2 = mfbaa + mfbca;
+     m1 = mfbca - mfbaa;
+     m0 = m2 + mfbba;
+     mfbaa = m0;
+     m0 += UbMath::c2o3 * oMdrho;
+     mfbba = m1 - m0 * vvy;
+     mfbca = m2 - 2. * m1 * vvy + vy2 * m0;
+     ////////////////////////////////////////////////////////////////////////////////////
+     m2 = mfbab + mfbcb;
+     m1 = mfbcb - mfbab;
+     m0 = m2 + mfbbb;
+     mfbab = m0;
+     mfbbb = m1 - m0 * vvy;
+     mfbcb = m2 - 2. * m1 * vvy + vy2 * m0;
+     ////////////////////////////////////////////////////////////////////////////////////
+     m2 = mfbac + mfbcc;
+     m1 = mfbcc - mfbac;
+     m0 = m2 + mfbbc;
+     mfbac = m0;
+     m0 += UbMath::c2o9 * oMdrho;
+     mfbbc = m1 - m0 * vvy;
+     mfbcc = m2 - 2. * m1 * vvy + vy2 * m0;
+     ////////////////////////////////////////////////////////////////////////////////////
+     ////////////////////////////////////////////////////////////////////////////////////
+     m2 = mfcaa + mfcca;
+     m1 = mfcca - mfcaa;
+     m0 = m2 + mfcba;
+     mfcaa = m0;
+     m0 += UbMath::c1o6 * oMdrho;
+     mfcba = m1 - m0 * vvy;
+     mfcca = m2 - 2. * m1 * vvy + vy2 * m0;
+     ////////////////////////////////////////////////////////////////////////////////////
+     m2 = mfcab + mfccb;
+     m1 = mfccb - mfcab;
+     m0 = m2 + mfcbb;
+     mfcab = m0;
+     mfcbb = m1 - m0 * vvy;
+     mfccb = m2 - 2. * m1 * vvy + vy2 * m0;
+     ////////////////////////////////////////////////////////////////////////////////////
+     m2 = mfcac + mfccc;
+     m1 = mfccc - mfcac;
+     m0 = m2 + mfcbc;
+     mfcac = m0;
+     m0 += UbMath::c1o18 * oMdrho;
+     mfcbc = m1 - m0 * vvy;
+     mfccc = m2 - 2. * m1 * vvy + vy2 * m0;
+     ////////////////////////////////////////////////////////////////////////////////////
+     ////////////////////////////////////////////////////////////////////////////////////
+     // mit     1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9            Konditionieren
+     ////////////////////////////////////////////////////////////////////////////////////
+     // X - Dir
+     m2 = mfaaa + mfcaa;
+     m1 = mfcaa - mfaaa;
+     m0 = m2 + mfbaa;
+     mfaaa = m0;
+     m0 += 1. * oMdrho;
+     mfbaa = m1 - m0 * vvx;
+     mfcaa = m2 - 2. * m1 * vvx + vx2 * m0;
+     ////////////////////////////////////////////////////////////////////////////////////
+     m2 = mfaba + mfcba;
+     m1 = mfcba - mfaba;
+     m0 = m2 + mfbba;
+     mfaba = m0;
+     mfbba = m1 - m0 * vvx;
+     mfcba = m2 - 2. * m1 * vvx + vx2 * m0;
+     ////////////////////////////////////////////////////////////////////////////////////
+     m2 = mfaca + mfcca;
+     m1 = mfcca - mfaca;
+     m0 = m2 + mfbca;
+     mfaca = m0;
+     m0 += UbMath::c1o3 * oMdrho;
+     mfbca = m1 - m0 * vvx;
+     mfcca = m2 - 2. * m1 * vvx + vx2 * m0;
+     ////////////////////////////////////////////////////////////////////////////////////
+     ////////////////////////////////////////////////////////////////////////////////////
+     m2 = mfaab + mfcab;
+     m1 = mfcab - mfaab;
+     m0 = m2 + mfbab;
+     mfaab = m0;
+     mfbab = m1 - m0 * vvx;
+     mfcab = m2 - 2. * m1 * vvx + vx2 * m0;
+     ////////////////////////////////////////////////////////////////////////////////////
+     m2 = mfabb + mfcbb;
+     m1 = mfcbb - mfabb;
+     m0 = m2 + mfbbb;
+     mfabb = m0;
+     mfbbb = m1 - m0 * vvx;
+     mfcbb = m2 - 2. * m1 * vvx + vx2 * m0;
+     ////////////////////////////////////////////////////////////////////////////////////
+     m2 = mfacb + mfccb;
+     m1 = mfccb - mfacb;
+     m0 = m2 + mfbcb;
+     mfacb = m0;
+     mfbcb = m1 - m0 * vvx;
+     mfccb = m2 - 2. * m1 * vvx + vx2 * m0;
+     ////////////////////////////////////////////////////////////////////////////////////
+     ////////////////////////////////////////////////////////////////////////////////////
+     m2 = mfaac + mfcac;
+     m1 = mfcac - mfaac;
+     m0 = m2 + mfbac;
+     mfaac = m0;
+     m0 += UbMath::c1o3 * oMdrho;
+     mfbac = m1 - m0 * vvx;
+     mfcac = m2 - 2. * m1 * vvx + vx2 * m0;
+     ////////////////////////////////////////////////////////////////////////////////////
+     m2 = mfabc + mfcbc;
+     m1 = mfcbc - mfabc;
+     m0 = m2 + mfbbc;
+     mfabc = m0;
+     mfbbc = m1 - m0 * vvx;
+     mfcbc = m2 - 2. * m1 * vvx + vx2 * m0;
+     ////////////////////////////////////////////////////////////////////////////////////
+     m2 = mfacc + mfccc;
+     m1 = mfccc - mfacc;
+     m0 = m2 + mfbcc;
+     mfacc = m0;
+     m0 += UbMath::c1o9 * oMdrho;
+     mfbcc = m1 - m0 * vvx;
+     mfccc = m2 - 2. * m1 * vvx + vx2 * m0;
+     ////////////////////////////////////////////////////////////////////////////////////
+     // Cumulants
+     ////////////////////////////////////////////////////////////////////////////////////
+     LBMReal OxxPyyPzz = 1.; //omega2 or bulk viscosity
+     // LBMReal OxyyPxzz = 1.;//-s9;//2+s9;//
+     // LBMReal OxyyMxzz  = 1.;//2+s9;//
 
-         //Cum 4.
-         //LBMReal CUMcbb = mfcbb - ((mfcaa + UbMath::c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015
-         //LBMReal CUMbcb = mfbcb - ((mfaca + UbMath::c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015
-         //LBMReal CUMbbc = mfbbc - ((mfaac + UbMath::c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015
+     //Cum 4.
+     //LBMReal CUMcbb = mfcbb - ((mfcaa + UbMath::c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015
+     //LBMReal CUMbcb = mfbcb - ((mfaca + UbMath::c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015
+     //LBMReal CUMbbc = mfbbc - ((mfaac + UbMath::c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015
 
-         // LBMReal CUMcbb = mfcbb - ((mfcaa + UbMath::c1o3) * mfabb + 2. * mfbba * mfbab);
-         // LBMReal CUMbcb = mfbcb - ((mfaca + UbMath::c1o3) * mfbab + 2. * mfbba * mfabb);
-         // LBMReal CUMbbc = mfbbc - ((mfaac + UbMath::c1o3) * mfbba + 2. * mfbab * mfabb);
+     // LBMReal CUMcbb = mfcbb - ((mfcaa + UbMath::c1o3) * mfabb + 2. * mfbba * mfbab);
+     // LBMReal CUMbcb = mfbcb - ((mfaca + UbMath::c1o3) * mfbab + 2. * mfbba * mfabb);
+     // LBMReal CUMbbc = mfbbc - ((mfaac + UbMath::c1o3) * mfbba + 2. * mfbab * mfabb);
 
-         // LBMReal CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + UbMath::c1o3 * (mfcaa + mfaca) * oMdrho + UbMath::c1o9 * (oMdrho - 1) * oMdrho);
-         // LBMReal CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + UbMath::c1o3 * (mfcaa + mfaac) * oMdrho + UbMath::c1o9 * (oMdrho - 1) * oMdrho);
-         // LBMReal CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + UbMath::c1o3 * (mfaac + mfaca) * oMdrho + UbMath::c1o9 * (oMdrho - 1) * oMdrho);
+     // LBMReal CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + UbMath::c1o3 * (mfcaa + mfaca) * oMdrho + UbMath::c1o9 * (oMdrho - 1) * oMdrho);
+     // LBMReal CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + UbMath::c1o3 * (mfcaa + mfaac) * oMdrho + UbMath::c1o9 * (oMdrho - 1) * oMdrho);
+     // LBMReal CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + UbMath::c1o3 * (mfaac + mfaca) * oMdrho + UbMath::c1o9 * (oMdrho - 1) * oMdrho);
 
-         //Cum 5.
-         // LBMReal CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) - UbMath::c1o3 * (mfbca + mfbac) * oMdrho;
-         // LBMReal CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) - UbMath::c1o3 * (mfcba + mfabc) * oMdrho;
-         // LBMReal CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) - UbMath::c1o3 * (mfacb + mfcab) * oMdrho;
+     //Cum 5.
+     // LBMReal CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) - UbMath::c1o3 * (mfbca + mfbac) * oMdrho;
+     // LBMReal CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) - UbMath::c1o3 * (mfcba + mfabc) * oMdrho;
+     // LBMReal CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) - UbMath::c1o3 * (mfacb + mfcab) * oMdrho;
 
-         //Cum 6.
+     //Cum 6.
 //         LBMReal CUMccc = mfccc + ((-4. * mfbbb * mfbbb
 //            - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
 //            - 4. * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc)
@@ -1120,23 +1112,23 @@ usage: ...
 //               + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3 * oMdrho) + c1o27 * oMdrho;
 
 
-         LBMReal mxxPyyPzz = mfcaa + mfaca + mfaac;
-         LBMReal mxxMyy = mfcaa - mfaca;
-         LBMReal mxxMzz = mfcaa - mfaac;
+     LBMReal mxxPyyPzz = mfcaa + mfaca + mfaac;
+     LBMReal mxxMyy = mfcaa - mfaca;
+     LBMReal mxxMzz = mfcaa - mfaac;
+
+     LBMReal dxux = -UbMath::c1o2 * collFactorF * (mxxMyy + mxxMzz) + UbMath::c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz);
+     LBMReal dyuy = dxux + collFactorF * UbMath::c3o2 * mxxMyy;
+     LBMReal dzuz = dxux + collFactorF * UbMath::c3o2 * mxxMzz;
 
-         LBMReal dxux = -UbMath::c1o2 * collFactorF * (mxxMyy + mxxMzz) + UbMath::c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz);
-         LBMReal dyuy = dxux + collFactorF * UbMath::c3o2 * mxxMyy;
-         LBMReal dzuz = dxux + collFactorF * UbMath::c3o2 * mxxMzz;
+     LBMReal Dxy = -UbMath::three * collFactorF * mfbba;
+     LBMReal Dxz = -UbMath::three * collFactorF * mfbab;
+     LBMReal Dyz = -UbMath::three * collFactorF * mfabb;
 
-         LBMReal Dxy = -UbMath::three * collFactorF * mfbba;
-         LBMReal Dxz = -UbMath::three * collFactorF * mfbab;
-         LBMReal Dyz = -UbMath::three * collFactorF * mfabb;
 
-         
-         //TODO: may be factor 2
-         return sqrt(UbMath::c2 * (dxux * dxux + dyuy * dyuy + dzuz * dzuz) + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz) / (rho + UbMath::one);
-      }
-   }
+     //TODO: may be factor 2
+     return sqrt(UbMath::c2 * (dxux * dxux + dyuy * dyuy + dzuz * dzuz) + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz) / (rho + UbMath::one);
+  }
+}
 #endif
 
 
diff --git a/src/cpu/VirtualFluidsCore/LBM/LBMUnitConverter.h b/src/cpu/VirtualFluidsCore/LBM/LBMUnitConverter.h
index 3059fd3831d3daf1bc05254c67b3d671a0d81cb7..40570cc3847f71a1942791afa7e95145daafb53b 100644
--- a/src/cpu/VirtualFluidsCore/LBM/LBMUnitConverter.h
+++ b/src/cpu/VirtualFluidsCore/LBM/LBMUnitConverter.h
@@ -1,3 +1,36 @@
+//=======================================================================================
+// ____          ____    __    ______     __________   __      __       __        __
+// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
+//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
+//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
+//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
+//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
+//      \    \  |    |   ________________________________________________________________
+//       \    \ |    |  |  ______________________________________________________________|
+//        \    \|    |  |  |         __          __     __     __     ______      _______
+//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
+//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
+//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
+//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
+//
+//  This file is part of VirtualFluids. VirtualFluids is free software: you can
+//  redistribute it and/or modify it under the terms of the GNU General Public
+//  License as published by the Free Software Foundation, either version 3 of
+//  the License, or (at your option) any later version.
+//
+//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
+//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+//  for more details.
+//
+//  You should have received a copy of the GNU General Public License along
+//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
+//
+//! \file LBMUnitConverter.h
+//! \ingroup LBM
+//! \author Soeren Freudiger
+//=======================================================================================
+
 #ifndef LBMUNITCONVERTER_H
 #define LBMUNITCONVERTER_H
 
@@ -7,24 +40,25 @@
 #include <sstream>
 #include <string>
 
-//#include "LBMUnitConverter.h"
-
 #include <basics/utilities/UbException.h>
-#include <basics/utilities/UbFileInput.h>
-#include <basics/utilities/UbFileOutput.h>
 
-// LBMUnitConverter conv(  100 /*L_World*/, 1484/*cs_water*/    , 1000/*rho_water*/
-//                         , 1000/*L_LB*/   , 1./srqt(3.)/*cs_Lb*/, 1/*rho_Lb*/ );
-// cout<<conv.toString()<<endl;
-//
-// cout<<"100m       = "<< 100  * conv.getFactorLentghWToLb()   << "dx    " << std::endl;
-// cout<<"1000dx     = "<< 1000 * conv.getFactorLentghLbToW()   << "m     " << std::endl;
-//
-// cout<<"25m/s      = "<< 25   * conv.getFactorVelocityWToLb() << "dx/dt " << std::endl;
-// cout<<"0.04 dx/dt = "<< 0.04 * conv.getFactorVelocityLbToW() << "m/s   " << std::endl;
-//
-// alternativ
-// LBMUnitConverter conv(, 100 /*L_World*/, LBMUnitConverter::WATER, 1000/*L_LB*/  );
+//! \brief A class provides converter for LB units <-> SI units
+//! \details
+//! \code
+//! LBMUnitConverter conv(  100 /*L_World*/, 1484/*cs_water*/    , 1000/*rho_water*/
+//!                         , 1000/*L_LB*/   , 1./srqt(3.)/*cs_Lb*/, 1/*rho_Lb*/ );
+//! cout<<conv.toString()<<endl;
+//!
+//! cout<<"100m       = "<< 100  * conv.getFactorLentghWToLb()   << "dx    " << std::endl;
+//! cout<<"1000dx     = "<< 1000 * conv.getFactorLentghLbToW()   << "m     " << std::endl;
+//!
+//! cout<<"25m/s      = "<< 25   * conv.getFactorVelocityWToLb() << "dx/dt " << std::endl;
+//! cout<<"0.04 dx/dt = "<< 0.04 * conv.getFactorVelocityLbToW() << "m/s   " << std::endl;
+//! \endcode
+//! alternative
+//! \code
+//! LBMUnitConverter conv(, 100 /*L_World*/, LBMUnitConverter::WATER, 1000/*L_LB*/  );
+//! \endcode
 
 class LBMUnitConverter
 {
@@ -161,20 +195,6 @@ public:
 
         return out.str();
     }
-    /*==========================================================*/
-    virtual void write(UbFileOutput *out)
-    {
-        out->writeDouble(factorLengthLbToW);
-        out->writeDouble(factorTimeLbToW);
-        out->writeDouble(factorMassLbToW);
-    }
-    /*==========================================================*/
-    virtual void read(UbFileInput *in)
-    {
-        factorLengthLbToW = in->readDouble();
-        factorTimeLbToW   = in->readDouble();
-        factorMassLbToW   = in->readDouble();
-    }
 
     void init(const double &refLengthWorld, const double & /*csWorld*/, const double &rhoWorld, const double &vWorld,
               const double &refLengthLb, const double &rhoLb, const double &vLb)
diff --git a/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitor.cpp b/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitor.cpp
index 7ebdfa85e85200a6bd8adf760f13d6742b7e2b2d..bc1e7d11defc33ade7a1aeb33377dff213efe3a0 100644
--- a/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitor.cpp
+++ b/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitor.cpp
@@ -136,11 +136,11 @@ void InitDistributionsBlockVisitor::visit(const SPtr<Grid3D> grid, SPtr<Block3D>
    this->muVx3.DefineVar("x1",&x1); this->muVx3.DefineVar("x2",&x2); this->muVx3.DefineVar("x3",&x3);
    this->muRho.DefineVar("x1",&x1); this->muRho.DefineVar("x2",&x2); this->muRho.DefineVar("x3",&x3);
 
-   //Funktionszeiger
-   typedef void (*CalcFeqsFct)(LBMReal* const& /*feq[27]*/,const LBMReal& /*(d)rho*/,const LBMReal& /*vx1*/,const LBMReal& /*vx2*/,const LBMReal& /*vx3*/);
-   CalcFeqsFct   calcFeqsFct   = NULL;
+    using CalcFeqsFct = void (*)(LBMReal *const & /*feq[27]*/, const LBMReal & /*(d)rho*/, const LBMReal & /*vx1*/,
+                                 const LBMReal & /*vx2*/, const LBMReal & /*vx3*/);
+    CalcFeqsFct calcFeqsFct = NULL;
    
-   LBMReal vx1,vx2,vx3,rho;
+   LBMReal vx1, vx2, vx3, rho;
 
    int gridRank = grid->getRank();
    int blockRank = block->getRank();
diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetKernelBlockVisitor.h b/src/cpu/VirtualFluidsCore/Visitors/SetKernelBlockVisitor.h
index 6eb8f6577e0c467df469667900d43e1a38ea15b1..51cbc256cfeac03b2d51acf8ebe8fca12a3f33ed 100644
--- a/src/cpu/VirtualFluidsCore/Visitors/SetKernelBlockVisitor.h
+++ b/src/cpu/VirtualFluidsCore/Visitors/SetKernelBlockVisitor.h
@@ -49,10 +49,6 @@ class SetKernelBlockVisitor : public Block3DVisitor
 public:
     enum Action { NewKernel, ChangeKernel, ChangeKernelWithData };
 
-    // SetKernelBlockVisitor(LBMKernel3DPtr kernel, LBMReal nue);
-
-    // SetKernelBlockVisitor(LBMKernel3DPtr kernel, LBMReal nue, double availMem, double needMem);
-
     SetKernelBlockVisitor(SPtr<LBMKernel> kernel, LBMReal nue, double availMem, double needMem,
                           SetKernelBlockVisitor::Action action = SetKernelBlockVisitor::NewKernel);
 
diff --git a/src/gpu/GksGpu/CMakeLists.txt b/src/gpu/GksGpu/CMakeLists.txt
index b6e91a2cb6dbfabd61adf4fc20dd8dab5aa82e0c..da404e0209ed2c9f36ae323d2e6bd234fb6dfb96 100644
--- a/src/gpu/GksGpu/CMakeLists.txt
+++ b/src/gpu/GksGpu/CMakeLists.txt
@@ -1,3 +1,3 @@
 project(GksGpu LANGUAGES CUDA CXX)
 
-vf_add_library(BUILDTYPE shared PRIVATE_LINK basics GksMeshAdapter OpenMP::OpenMP_CXX MPI::MPI_CXX)
+vf_add_library(PRIVATE_LINK basics GksMeshAdapter OpenMP::OpenMP_CXX MPI::MPI_CXX)
diff --git a/src/gpu/GksMeshAdapter/CMakeLists.txt b/src/gpu/GksMeshAdapter/CMakeLists.txt
index 3e47fe4abb10c9b9165d9e795bfcf034f607fd22..cb00b3c016786c41ef5640eb362322bb0a3768f8 100644
--- a/src/gpu/GksMeshAdapter/CMakeLists.txt
+++ b/src/gpu/GksMeshAdapter/CMakeLists.txt
@@ -1,3 +1,3 @@
+project(GksMeshAdapter LANGUAGES CUDA CXX)
 
-
-vf_add_library(BUILDTYPE shared PRIVATE_LINK basics GridGenerator)
+vf_add_library(PRIVATE_LINK basics GridGenerator)